Python多处理问题

时间:2010-12-23 02:47:24

标签: python multiprocessing

我的程序有两部分分为核心和下载程序。核心处理所有应用程序逻辑,而下载程序只下载URL。现在,我正在尝试使用python多处理模块来完成作为进程的核心任务和作为进程的下载程序。

我注意到的第一个问题是,如果我从核心进程生成下载程序进程,以便下载程序是子进程而核心是父进程,则核心进程(父进程)将被阻塞,直到子进程完成。我不想要这种行为。我希望有一个核心流程和一个下载程序,它们都能够执行代码并在彼此之间进行通信。

例如

...
def main():
    jobQueue = Queue()
    jobQueue.put("http://google.com)
    d = Downloader(jobQueue)
    p = Process(target=d.start())
    p.start()

if __name__ == '__main__':
    freeze_support()
    main()

其中Downloader的start()只是将url从队列中取出并下载。

为了让2个进程解除阻塞,我是否需要从父进程创建2个进程然后在它们之间共享?

1 个答案:

答案 0 :(得分:5)

p = Process(target=d.start())行,您正在呼叫d.start()。删除parens,如下所示:

...
def main():
    jobQueue = Queue()
    jobQueue.put("http://google.com")
    d = Downloader(jobQueue)
    p = Process(target=d.start)
    p.start()

if __name__ == '__main__':
    freeze_support()
    main()