ContextManager получает доступ к locals() вызова с помощью блока ⇐ Python
ContextManager получает доступ к locals() вызова с помощью блока
Я пытаюсь написать многопоточный помощник с контекстными менеджерами. Идея состоит в том, чтобы определить набор функций внутри блока, а менеджер контекста «волшебным образом» позаботится о планировании и обо всем остальном. Упрощенная рабочая версия выглядит так:
импортировать контекстную библиотеку @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(), существующем в этой области , и это, по сути, то, что мне нужно знать, какие функции там определены. Есть идеи/хитрости/слова поддержки?
Спасибо за чтение!
Я пытаюсь написать многопоточный помощник с контекстными менеджерами. Идея состоит в том, чтобы определить набор функций внутри блока, а менеджер контекста «волшебным образом» позаботится о планировании и обо всем остальном. Упрощенная рабочая версия выглядит так:
импортировать контекстную библиотеку @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(), существующем в этой области , и это, по сути, то, что мне нужно знать, какие функции там определены. Есть идеи/хитрости/слова поддержки?
Спасибо за чтение!
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
ContextLib.contextManager не поднимает исключения, если возврат, наконец, в пункте
Anonymous » » в форуме Python - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-