社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Thomas • 6 年前 • 1600 次点击  

下面的代码似乎对我不起作用。它需要在网络上的另一台计算机上启动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
 
1600 次点击  
文章 [ 2 ]  |  最新文章 6 年前