与现有会话并行运行多个类实例方法

时间:2019-04-22 11:18:30

标签: python flask sqlalchemy multiprocessing

我正在尝试使用多处理程序的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

任何帮助将不胜感激!

0 个答案:

没有答案