下面的代码似乎对我不起作用。它需要在网络上的另一台计算机上启动PPServer,例如使用以下命令:
ppserver.py -r -a -w 4
启动此服务器后,在我的计算机上运行以下代码:
import pp
import time
job_server = pp.Server(ppservers = ("*",))
job_server.set_ncpus(0)
def addOneBillion(x):
r = x
for i in xrange(10**9):
r+=1
f = open('/home/tomb/statusfile.txt', 'a')
f.write('finished at '+time.asctime()+' for job with input '+str(x)+'\n')
return r
jobs = []
jobs.append(job_server.submit(addOneBillion, (1,), (), ("time",)))
jobs.append(job_server.submit(addOneBillion, (2,), (), ("time",)))
jobs.append(job_server.submit(addOneBillion, (3,), (), ("time",)))
for job in jobs:
print job()
print 'done'
奇怪的部分:
通过查看/home/cumble/statusfile.txt,我可以看到它被多次写入,就好像函数被多次运行一样。我已经观察到这种情况持续了一个多小时,而且从未见过
job()
返回。
气味:
如果我将testfunc定义中的迭代次数更改为10**8,那么函数只运行一次,并按预期返回结果!
似乎是某种种族状况?只使用本地核心就可以了。这是第1.6.0和1.5.7版。
更新:大约775000000:我得到不一致的结果:两个作业重复一次,第一次完成。
一周后更新:我已经编写了自己的并行处理模块来解决这个问题,并且在将来将避免使用并行的Python,除非有人发现了这一点——我将在某个时候考虑更多(实际上是深入到源代码中)。
几个月后更新:没有剩下的苦涩感觉,平行巨蟒。我计划在有时间迁移我的应用程序后立即返回。标题编辑以反映解决方案。