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

When using the multiprocessing library, how do I bind resources to specific processes?

假设我有 50 个进程,我正在使用它们来操作(比方说)20000 个不同的输入值。 (我正在使用 pathos 库,我认为它的操作类似于 Python 中的多处理库。)

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

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

我该怎么做?

我想出了如何使用 multiprocess 库而不是 pathos 库来做到这一点。创建进程池时,您可以指定一个 "initializer function",它在每个进程的开头运行。在这个初始化函数中,我创建了一个数据库引擎并将该引擎声明为进程的全局引擎。所以现在我每个进程只有一个引擎。

我是 pathosmultiprocess 的作者。事实证明 multiprocess 实际上是 pathos 使用的,但情况可能并不明显。您可以从 pathos:

>>> import pathos
>>> pathos.pools._ProcessPool 
<class 'multiprocess.pool.Pool'>

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