Python 简单并行科学程序设计

Python 简单并行科学程序设计,python,multiprocessing,Python,Multiprocessing,我经常编写简单的优化例程,如下所示: def createinstance(n): while(True): #create some instance called instance yield instance loopno = 100000 n= 100 min = 0 for i in xrange(loopno): for inst in createinstance(n): value = foo(inst)

我经常编写简单的优化例程,如下所示:

def createinstance(n):
    while(True):
        #create some instance called instance
        yield instance



loopno = 100000
n= 100
min = 0
for i in xrange(loopno):
    for inst in createinstance(n):
        value = foo(inst)
        if (value < min):
            min = value
            print min
我希望能够使用我的机器上的所有核心来做这件事

一个非常简单的方法就是将范围分成几个部分,并将它们分成多个核心,最后收集结果

更好的方法是让内核在空闲时请求一批实例

为了在python中获得最大效率,解决这个问题的好方法是什么?也许这已经足够成为一个社区问题了


这个问题似乎更简单。

关于标准Python安装,多处理模块似乎是您想要的,中的示例案例看起来很容易适应您的案例。如果内存不是一个问题,那么简单地在N个处理器上划分范围将是最有效的选择,因为进程之间没有通信

似乎有很多方法可以并行化python,可以使用MPI或SMP。pythonwiki上有一个潜在候选列表


并行Python支持SMP,这可能是您在本例中所需要的单机、多处理器,而不是一组机器。

您是否在某处使用i和n的值?createinstance现在是一个无限循环。@JanneKarila n用于createinstance。除了柜台,我在任何地方都不用。谢谢。仅仅划分范围的问题在于,处理器可能处于空闲状态。这确实适用于一台具有多个内核和共享内存的简单机器。为什么必须要有空闲的处理器?假设您有4个处理器,如果您有一个由4个进程组成的池,并且运行result=myPool.apply\u asyncmin、myList和result.get,您应该自动在所有处理器上共享。PoolNone甚至将处理器数量设置为cpu_计数。我想,如果你不想一次计算所有的迭代器,那么使用迭代器可能会有麻烦。问题是有些工作可能比其他工作花费更少的时间。那些早早完成工作的人就闲着了。还是我误解了模型?处理器是否有办法请求更多的工作?