首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何并行化一个简单的Python循环?

如何并行化一个简单的Python循环?
EN

Stack Overflow用户
提问于 2012-03-20 19:42:43
回答 10查看 479.5K关注 0票数 376

这可能是一个微不足道的问题,但是我如何在python中并行化下面的循环呢?

代码语言:javascript
复制
# setup output lists
output1 = list()
output2 = list()
output3 = list()

for j in range(0, 10):
    # calc individual parameter value
    parameter = j * offset
    # call the calculation
    out1, out2, out3 = calc_stuff(parameter = parameter)

    # put results into correct output list
    output1.append(out1)
    output2.append(out2)
    output3.append(out3)

我知道如何在Python中启动单线程,但我不知道如何“收集”结果。

多个进程也是可以的-对于这种情况来说,只要是最简单的就行。我目前使用的是Linux,但代码应该也可以在Windows和Mac上运行。

并行化这段代码最简单的方法是什么?

EN

回答 10

Stack Overflow用户

发布于 2015-09-18 02:20:37

为了并行化一个简单的for循环,joblib为多处理的原始使用带来了很多价值。不仅是短小的语法,还有一些东西,比如当迭代非常快的时候透明地聚集迭代(以消除开销),或者捕获子进程的回溯,以获得更好的错误报告。

免责声明:我是joblib的原始作者。

票数 92
EN

Stack Overflow用户

发布于 2019-03-28 22:14:30

我发现joblib对我非常有用。请参考以下示例:

代码语言:javascript
复制
from joblib import Parallel, delayed
def yourfunction(k):   
    s=3.14*k*k
    print "Area of a circle with a radius ", k, " is:", s

element_run = Parallel(n_jobs=-1)(delayed(yourfunction)(k) for k in range(1,10))

N_job=-1:使用所有可用核心

票数 9
EN

Stack Overflow用户

发布于 2012-03-20 19:54:59

为什么不使用线程和一个互斥量来保护一个全局列表呢?

代码语言:javascript
复制
import os
import re
import time
import sys
import thread

from threading import Thread

class thread_it(Thread):
    def __init__ (self,param):
        Thread.__init__(self)
        self.param = param
    def run(self):
        mutex.acquire()
        output.append(calc_stuff(self.param))
        mutex.release()   


threads = []
output = []
mutex = thread.allocate_lock()

for j in range(0, 10):
    current = thread_it(j * offset)
    threads.append(current)
    current.start()

for t in threads:
    t.join()

#here you have output list filled with data

记住,你会像你最慢的线程一样快。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9786102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档