Python中多进程实现多于两个级别

5 投票
4 回答
2456 浏览
提问于 2025-04-15 12:36

我想写一个程序,想要实现这样的过程:一个进程生成多个进程,然后这些进程再各自生成多个进程。

请问第二层的进程可以用多进程来生成吗?我是在用Python 2.6的multiprocessing模块。

谢谢!

4 个回答

1

是的,不过你可能会遇到一个问题,这个问题需要我昨天在Python主干上提交的修复。你可以查看这个错误的详细信息,链接在这里:http://bugs.python.org/issue5313

1

你可以把你的应用程序设计成一系列的处理池,通过队列进行沟通,层次可以很深。不过,这样做可能会变得比较复杂(可能是因为需要频繁切换上下文)。

不过,这肯定不是 Erlang 的那种方式。

关于 multiprocessing 的文档非常有用。

这里(评论里放不下的内容)有一些代码,我用它来提高一个更新我信息源的程序的处理速度。我有一个进程在不断检查需要获取的信息源,它把结果放进一个队列,然后一个有4个工作进程的处理池会取出这些结果并获取信息源,获取到的结果(如果有的话)再放进一个队列,供另一个处理池解析,并再放回数据库。如果按顺序来做,这个过程会非常慢,因为有些网站响应得很慢,所以大部分时间这个进程都在等网络数据,只用到了一个核心。在这种基于进程的模型下,似乎我最常在等数据库,而我的网络接口卡(NIC)大部分时间都在忙,4个核心也都在工作。你的情况可能会有所不同。

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开始运行。

撰写回答