这个玩具环境中最好的多处理方法

时间:2012-12-03 22:33:46

标签: python performance parallel-processing multiprocessing

我想使用多处理来提高项目的速度。

from multiprocessing import Queue, Process

def build(something):
    # ... Build something ...
    return something

# Things I want to build.
# Each of these things requires DIFFERENT TIME to be built.
some_things = [a_house, a_rocket, a_car]

#________________________________
# My approach

def do_work(queue, func, args):
    queue.put(func(*args))

# Initialize a result queue
queue = Queue()

# Here I'll need to distribute the tasks (in case there are many)
# through each process. For example process 1 build a house and a rocket 
# and so on. Anyway this is not the case..
procs = [Process(target=do_work, args=thing) for thing in some_things]

# Finally, Retrieve things from the queue
results = []
while not queue.empty():
    results.append(queue.get())

问题在于,如果一个流程完成构建它的东西,它将等到其他流程完成,而我希望这个流程做其他事情。

我怎样才能做到这一点?我想我可以使用一个工作池,但我真的不明白如何使用它,因为我需要检索结果。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您可以使用以下几种技术:

  1. 使用共享内存数组在主进程和所有子进程之间进行通信。将dicts作为输入值,并在计算输出值后设置标志。

  2. 使用管道将作业初始化数据从主服务器传递给工作人员,并将结果从工作人员返回给主服务器。如果您可以轻松地序列化数据,这很有效。

  3. 这两个课程详述如下:http://docs.python.org/2/library/multiprocessing.html