Python多进程:billiard vs multiprocessing

3
原始问题: 使用celery任务队列,我希望进程池中的进程使用共享的CUDA数组(即,不是每个进程都有自己独特的数组,而是希望一个数组可以被所有进程访问。这是安全的,因为只执行读取操作)。Pytorch的torch.multiprocessing库允许此操作,并且根据文档,它是multiprocessing的简单替代品。 billiardmultiprocessing似乎是创建进程池的两个可行选项。目前,Python任务队列库celery使用billiard(与multiprocessing相比,有一些特性改进)。有人在这里提出了一个问题,但答案并不是很具体。
It backports changes from the Python 2.7 and 3.x. 
The current version is compatible with Py2.4 - 2.7 and falls back to multiprocessing for 3.x, 
the next version will only support 2.6, 2.7 and 3.x. 

我需要在celery的源代码中将billiard替换为multiprocessing(以便使用pytorch的多进程库torch.multiprocessing),但这样做有什么问题吗?multiprocessingbilliard之间有什么区别?


1
请描述原始问题,而不是您尝试的解决方案。 - Klaus D.
2
“但这样可以吗?” - 我可以保证它不会是一个即插即用的替代品。现在,billiardmultiprocessing有很大的区别。我建议您按照@KlausD.的建议描述您的原始问题。 - Alex Yu
@KlausD。 添加了原始问题的描述。 - AgnosticCucumber
所以,你想在fork之前初始化一些变量吗? - georgexsh
@georgexsh 是的,我希望这个变量在所有进程之间共享。然而,由于变量是GPU数组且语言为Python,使用某些CUDA IPC API会比C语言更难,但在Python中不可用。唯一的方法是依赖于Pytorch库,该库实现了一些CUDA API。 - AgnosticCucumber
1个回答

5
对于那些想要用 multiprocessing 替代 celery 中的 billiard 的人,根据 celery 开发团队的这个回复,这是不可能的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接