我的程序有两部分分为核心和下载程序。核心处理所有应用程序逻辑,而下载程序只下载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个进程然后在它们之间共享?
答案 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()