在多个核心上运行python程序

时间:2012-10-21 05:25:50

标签: python multithreading parallel-processing

我是多核编程的新手。以下程序仅使用一个核心。如何让它在多个核心上运行(我有4个核心)。

simDict={}

def sim(outer,inner, ...):
    val= /*do some math*/
    simDict[...]=val

def foo():
   for outer in xrange(0, limit):
      for inner in xrange(outer, limit):
          sim(outer,inner, ...)
foo()

2 个答案:

答案 0 :(得分:5)

易:

from multiprocessing import Pool

p = Pool()

def do_inner(outer, limit):
    for inner in xrange(outer, limit):
        sim(outer, inner, ...)

def foo():
    p.map(do_inner, xrange(limit))

foo()

这使用multiprocessing.Pool来创建一个工作进程池。

答案 1 :(得分:1)

对于你的问题,我会使用队列,然后我会坚持消费者/生产者的问题,并从那里开始。除非你的线程之间存在一些数据依赖性,否则你需要进入一些更高级的锁定机制,并且必须防止更多的线程陷阱。

制作人/消费者概念:http://en.wikipedia.org/wiki/Producer-consumer_problem 仅供参考:http://docs.python.org/library/multiprocessing.html

multiprocessing可能会有所帮助,如果只使用线程,全局解释器锁可能会在某些特定情况下减慢速度。