Я пытаюсь выполнить действие несколько раз параллельно, используя пул многопроцессорной обработки, но получаю PicklingError.
Код выглядит следующим образом:
from multiprocessing import Pool, cpu_count
pool = Pool(processes=cpu_count())
processes = [pool.apply_async(self.some_func, kwds=some_kwargs) for item in list]
results = [process.get() for process in processes]
Функция, которую я запускаю, действительно является методом экземпляра класса, и мне нужно подключение к сеансу, пока этот процесс выполняется.
Последняя строка (в частности, process.get ()) дает мне PicklingError:
_pickle.PicklingError: Can't pickle <class 'sqlalchemy.orm.session.Session'>: it's not the same object as sqlalchemy.orm.session.Session
Я пытался некоторое время искать, пробовал async await, asyncio и ThreadPool.
Мне нужно, чтобы этот метод запускался несколько раз параллельно (для экономии времени) и получаювозвращаемое значение обратно.
PS: я не могу показать реальный код, потому что это часть рабочего проекта, которым мне не разрешено делиться, но если это поможет, скажем, self.some_func выглядит следующим образом:
class MyClass():
def __init__(self):
....
def __initapp__(app, db):
self._db_session = db.session
... more settings
def some_func(x, y, z):
do something with x, y and z
persist something to the database
Любая помощь будет принята с благодарностью!