请问,用 Pool 进程池,能否写成一个进程完成之后执行一段代码之后再开新的进程?

2016-05-09 22:19:47 +08:00
 yanyuechuixue

是这样,我用的进程都是互相独立的,我现在是通过使用进程的返回值来得到进程运行的结果(而不是通信,因为返回值比较容易) 我是把返回的值 append 到一个列表里,最后把列表里的数按照一定规则加起来。 但这样的话,如果线程足够多,就会让这个列表很大。占用的内存超过物理内存,太亏了。

所以我在想,能不能完成一个进程就把这个进程的返回值先运算完了再开新的进程,这样就不用先存着结果等全部进程都结束了再运算了。

但我没找到相关方法,所以来这里请教。

现在的部分代码是:

result=[]
for NaborDec in range(-4,5):
    for b in Qso_Pairs_List[ra+NaborRa][dec+NaborDec]:
        if a[0] > b[0]:
            result.append(pool.apply_async(GetPairs_a,(a,b)))

pool.close()
pool.join()

CorrUp=[[ 0 for x in range(BinsPart)]for y in range(BinsPart)]
CorrDown=[[ 0 for x in range(BinsPart)]for y in range(BinsPart)]

for res in result:
    for i in range(BinsPart):
        for j in range(BinsPart):
            CorrUp[i][j]=CorrUp[i][j] + res.get()[0][i][j]
            CorrDown[i][j]=CorrDown[i][j] + res.get()[1][i][j]
2299 次点击
所在节点    Python
2 条回复
binux
2016-05-09 22:44:20 +08:00
Pool.imap
yanyuechuixue
2016-05-10 10:41:52 +08:00
@binux
谢谢,虽然没看明白,我再看看去。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/277466

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX