我想做一个程序,并希望像这个过程一样产生 - > n过程 - > n过程
第二级生成进程可以进行多处理吗?使用python 2.6的multiprocessinf模块
日Thnx
答案 0 :(得分:3)
@ vilalian的回答是正确的,但简洁。当然,当您的原始问题含糊不清时,很难提供更多信息。
要进一步展开,您的原始程序会产生n
个进程,但它们与您原来的程序略有不同(如果我理解您的问题)生成n
个更多进程。您可以通过让它们运行与原始进程类似的代码来实现此目的,但是它产生了执行手头任务的新程序集,无需进一步处理,或者您可以使用相同的代码/入口点,只需提供不同的参数 - 像
def main(level):
if level == 0:
do_work
else:
for i in range(n):
spawn_process_that_runs_main(level-1)
并以level == 2
答案 1 :(得分:1)
您可以将应用程序构建为一系列通过任何嵌套深度的队列进行通信的进程池。虽然它可以很快变得毛茸茸(可能是由于所需的上下文切换)。
这不是erlang,虽然这是肯定的。
multiprocessing上的文档非常有用。
Here(评论中有点太多)是我用来增加更新我的Feed的程序的吞吐量的一些代码。我有一个进程轮询需要提取的提要,这会导致它产生一个队列,一个4个工作组的进程池获取这些结果并获取提要,然后将结果(如果有的话)放入进程的队列中池解析并放入队列以推回数据库。按顺序完成,这个过程会非常缓慢,因为有些网站会花费很多时间来回应,因此大部分时间流程都在等待来自互联网的数据并且只使用一个核心。在这个基于这个过程的模型下,我实际上在等待数据库看起来最多,我的NIC大部分时间都在饱和,而且所有4个内核实际上正在做一些事情。您的里程可能会有所不同。
答案 2 :(得分:1)
是的 - 但是,您可能遇到一个问题,需要我昨天提交给python trunk的修复程序。请参阅错误http://bugs.python.org/issue5313
答案 3 :(得分:0)
当然可以。特别是如果你使用fork来生成子进程,它们就像完全正常的进程一样工作(比如父进程)。线程管理是完全不同的,但您也可以使用“二级”子步骤。
注意不要使程序过于复杂,因为具有两级线程的示例程序通常是未使用的。