Обход ошибки травления при передаче декораторов в многопроцессорный модульPython

Программы на Python
Ответить
Anonymous
 Обход ошибки травления при передаче декораторов в многопроцессорный модуль

Сообщение Anonymous »

Я использую идею «декоратора» как способ параметризации функций, но столкнулся с ошибками травления при передаче этих функций в качестве целей в многопроцессорный модуль. Я нашел обходной путь, явно установив атрибут __qualname__ функции-обертки (переопределив набор имен с помощью functools.wraps).
С помощью этого обходного пути я могу без проблем передать параметризованную функцию в многопроцессорный модуль.
Но законен ли этот обходной путь? Или это просто хак? Или есть лучший (более безопасный и надежный) способ установить уточняющее имя в функции-оболочке?

Код: Выделить всё

from functools import wraps
from math import cos, pi

def parameterize_f(*args):
def decorator(func,qname):
@wraps(func)
def wrapper(x):
return func(x,*args)

# Needed for pickling.
wrapper.__qualname__ = qname  # 

Подробнее здесь: [url]https://stackoverflow.com/questions/79842783/pickling-error-work-around-when-passing-decorators-to-multiprocessing-module[/url]
Ответить

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

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

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

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

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