Я использую 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
, как я могу заставить эту работу работать?
Спасибо!