Py学习  »  Python

令人费解的并行python问题-传输套接字超时

Thomas • 4 年前 • 798 次点击  

下面的代码似乎对我不起作用。它需要在网络上的另一台计算机上启动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,除非有人发现了这一点——我将在某个时候考虑更多(实际上是深入到源代码中)。

几个月后更新:没有剩下的苦涩感觉,平行巨蟒。我计划在有时间迁移我的应用程序后立即返回。标题编辑以反映解决方案。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/32911
 
798 次点击  
文章 [ 2 ]  |  最新文章 4 年前