使用多处理库时,如何将资源绑定到特定进程?

时间:2016-06-11 18:46:09

标签: python sqlalchemy multiprocessing pathos

假设我有50个进程,并且我使用它们来操作(例如)20000个不同的输入值。 (我使用的是pathos库,我认为它与Python中的多处理库类似。)

thread_pool = pathos.multiprocessing.ProcessingPool(threads=50)
thread_pool.map(function, inputs)

我想为每个进程创建一个SQLAlchemy数据库引擎(但我没有资源为每个输入值创建一个)。然后,我希望使用该进程处理的所有输入都使用相同的数据库引擎。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

我是pathosmultiprocess的作者。事实证明,multiprocess实际上是pathos正在使用的内容,但也许情况并非如此明显。您可以从pathos

执行此操作
>>> import pathos
>>> pathos.pools._ProcessPool 
<class 'multiprocess.pool.Pool'>

以上是直接来自Pool的原始multiprocess,而pathos.pools.ProcessPool是具有一些附加功能的更高级别的包装器,但是(尚未)公开所有关键字参数较低级Pool

答案 1 :(得分:0)

我想通过使用multiprocess库而不是pathos库来解决这个问题。创建进程池时,可以指定&#34;初始化函数&#34;,它在每个进程的开头运行。在这个初始化函数中,我创建了一个数据库引擎,并将该引擎声明为该进程的全局引擎。所以现在每个进程只有一个引擎。