多处理程序 - 不并行执行

时间:2014-06-23 13:06:44

标签: python multiprocessing

我目前正在从各个网站上删除数据。 scrappers的代码存储在模块(x,y,z,a,b)

其中x.dump是一个使用Files存储抓取数据的函数。 dump函数只需一个参数' input'。 注意:所有转储功能都不相同。

我试图并行运行这些转储功能。 以下代码运行正常。 但我注意到它仍然遵循串行顺序x然后y ...执行。

这是解决问题的正确方法吗?

多线程和多处理是并行编程的唯一本机方式吗?

from multiprocessing import Process

import x.x as x
import y.y as y
import z.z as z
import a.a as a
import b.b as b

input = ""

f_list = [x.dump, y.dump, z.dump, a.dump, b.dump]
processes = []

for function in f_list:
        processes.append(Process(target=function, args=(input,)))

for process in processes:
        process.run()

for process in processes:
        process.join()

2 个答案:

答案 0 :(得分:3)

那是因为run()是实现任务本身的方法,你并不打算从外面这样调用它。您应该调用start()来生成一个新进程,然后在另一个进程中调用run()并将控制权返回给您,这样您就可以做更多的工作(以及稍后join())。

答案 1 :(得分:0)

你应该调用process.start()而不是process.run()

start方法执行启动额外进程然后在该进程中运行run方法的工作。

Python docs