Я написал хороший процессор параллельных заданий, который принимает задания (функции, их аргументы, информацию о тайм-ауте и т. Д.) И отправляет их в Python multiprocessing. Я могу предоставить полный (длинный) код, если потребуется, но ключевым шагом (как я его вижу) является асинхронное приложение для пула:
job.resultGetter = self.pool.apply_async(
func = job.workFunction,
kwds = job.workFunctionKeywordArguments
)
Я пытаюсь использовать этот процессор параллельных заданий с большим объемом устаревшего кода и, возможно, естественно, наткнулся на травление:
PicklingError: Can’t pickle <type ’instancemethod’>: attribute lookup builtin .instancemethod failed
Этот тип проблемы наблюдается, когда я пытаюсь отправить проблемный объект в качестве аргумента для рабочей функции. Настоящая проблема в том, что это устаревший код, и мне советуют вносить в него только очень незначительные изменения. Итак ... есть ли какой-нибудь хитрый трюк или простая модификация, которую я могу где-нибудь сделать, чтобы мой код параллельного процессора заданий мог справиться с этими традиционно неотбираемыми объектами? У меня есть полный контроль над кодом процессора параллельных заданий, поэтому я открыт, например, для того, чтобы заключить каждую отправленную функцию в другую функцию. Что касается унаследованного кода, я должен иметь возможность добавлять случайные небольшие методы к объектам, но это все. Есть ли какой-нибудь умный подход к этому типу проблемы?