我想做一个程序,并希望像这个进程一样生成一个进程 -> n 进程 -> n 进程
二级生成过程可以多处理吗?使用 python 2.6 的 multiprocessinf 模块
谢谢
我想做一个程序,并希望像这个进程一样生成一个进程 -> n 进程 -> n 进程
二级生成过程可以多处理吗?使用 python 2.6 的 multiprocessinf 模块
谢谢
@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
是的 - 但是,您可能会遇到需要修复我昨天提交给 python trunk 的问题。请参阅错误http://bugs.python.org/issue5313
您可以将您的应用程序构建为一系列进程池,这些进程池通过任何嵌套深度的队列进行通信。虽然它可以很快变得毛茸茸(可能是由于所需的上下文切换)。
虽然这是肯定的,但它不是 erlang。
关于多处理的文档非常有用。
这里(有点太多不能发表评论)是我用来增加更新我的提要的程序中的吞吐量的一些代码。我有一个进程轮询需要获取的提要,将其填充到队列中,由 4 个工作人员组成的进程池获取这些结果并获取提要,然后将其结果(如果有)放入进程队列中解析池并将其放入队列中以推回数据库。按顺序完成,这个过程会非常慢,因为一些网站需要自己的甜蜜时间来响应,所以大部分时间这个过程都在等待来自互联网的数据,并且只会使用一个核心。在这个基于进程的模型下,我实际上是在等待数据库,而且我的 NIC 大部分时间都是饱和的,而且所有 4 个内核实际上都在做某事。
你当然可以。特别是如果您使用 fork 来生成子进程,它们就像完全正常的进程一样工作(就像父亲一样)。线程管理完全不同,但您也可以使用“二级”子线程。
请注意不要使您的程序过于复杂,因为通常不会使用具有两级线程的示例程序。