ContextManager получает доступ к locals() вызова с помощью блокаPython

Программы на Python
Ответить
Anonymous
 ContextManager получает доступ к locals() вызова с помощью блока

Сообщение Anonymous »


Я пытаюсь написать многопоточный помощник с контекстными менеджерами. Идея состоит в том, чтобы определить набор функций внутри блока, а менеджер контекста «волшебным образом» позаботится о планировании и обо всем остальном. Упрощенная рабочая версия выглядит так:

импортировать контекстную библиотеку @contextlib.contextmanager защита multi_threaded (количество): функции = [] функции доходности my_slice = int(count/len(funcs)) для меня функция в перечислении (функции): начало = my_slice * я func(начало, начало + my_slice) защита spawn_many(): набор данных = [1, 2, 3, 4, 5] с multi_threaded(len(dataset)) как mt: Защиту foo(start_idx, конец): print("foo" + str(набор данных[start_idx: end])) def bar(start_idx, end): print("bar" + str(набор данных[start_idx: end])) mt.append(фу) mt.append(бар) spawn_many() Этот пример работает, но я бы хотел избавиться от этих строк:

mt.append(foo) mt.append(бар) Так что пользователю нужно только определить функции, не добавляя их в коллекцию. Почему? Потому что она менее подвержена ошибкам, и я не смогу контролировать код, написанный с помощью этой библиотеки.

Проблема в том, что после выхода я выхожу за пределы области, в которой произошел def foo, поэтому я не знаю о locals(), существующем в этой области , и это, по сути, то, что мне нужно знать, какие функции там определены. Есть идеи/хитрости/слова поддержки?

Спасибо за чтение!
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»