2

我是多核编程的新手。以下程序仅使用一个核心。我怎样才能让它在多个核心上运行(我有 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()
4

2 回答 2

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用于创建一个工作进程池。

于 2012-10-21T05:29:39.620 回答
1

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

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

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

于 2012-10-21T05:30:16.817 回答