Обход ошибки травления при передаче декораторов в многопроцессорный модуль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]

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