我正在尝试使用多处理程序的Pool并行执行几次操作,但出现了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
我尝试搜索了一段时间,尝试了异步等待,异步和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
任何帮助将不胜感激!