Как передать сессию SQLAlchemy в многопроцессорную функцию? - PullRequest
0 голосов
/ 30 января 2020

Я использую SQLAlchemy для запроса базы данных SQLite и извлечения некоторой информации для каждого элемента в списке. Моя рабочая функция принимает элемент и объект сеанса для выполнения своей работы.

Но это слишком медленно, когда список длинный и загрузка моего ЦП довольно низкая (10%).

Поэтому я считаю хорошей идеей использовать многопроцессорную обработку, чтобы полностью использовать мой ЦП и немного ускорить работу. Для этого я использую пакет p_tqdm , который основан на pathos.multiprocessing.ThreadPool и tqdm.

Мой код похож на result = p_map(job, my_list, session), и я обнаружил PicklingError:

_pickle.PicklingError: Can't pickle <class 'sqlalchemy.orm.session.Session'>: it's not the same object as sqlalchemy.orm.session.Session

Та же ошибка произошла, даже если я использую multiprocessing.Pool:

with Pool(2) as p:
    result = p.starmap(job, zip(my_list, repeat(session)))

Означает ли это, что я не могу передать объект сеанса при использовании мультиобработки ? Все мои операции с базой данных выполняются с использованием SELECT, как я могу заставить эту работу работать?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...