gpt4 book ai didi

python - 令人费解的并行 Python 问题 - TRANSPORT_SOCKET_TIMEOUT

转载 作者:太空宇宙 更新时间:2023-11-04 01:41:53 26 4
gpt4 key购买 nike

以下代码对我来说似乎无法正常工作。它需要在网络上的另一台计算机上启动 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/tomb/statusfile.txt,我可以看到它被写入了好几次,就好像这个函数被运行了好几次一样。我之前观察到这种情况持续了一个多小时,但从未见过 job() 返回。

奇数:如果我将 testfunc 定义中的迭代次数更改为 10**8,该函数只运行一次,并返回预期的结果!

似乎是某种竞争条件?仅使用本地核心就可以正常工作。这是 pp v 1.6.0 和 1.5.7。

更新:大约 775,000,000:我得到不一致的结果:两个作业重复一次,第一次完成。

一周后的更新:我已经编写了自己的并行处理模块来解决这个问题,并且将来会避免使用并行 python,除非有人解决这个问题——我会抽出时间再看看它(实际上是潜水进入源代码)。

几个月后的更新:没有残留的怨恨,Parallel Python。我打算一有时间迁移我的应用程序就搬回去。标题编辑以反射(reflect)解决方案。

最佳答案

Parallel Python论坛Bagira的回答:

How long does the calculation of every job take? Have a look at the variable TRANSPORT_SOCKET_TIMEOUT in /usr/local/lib/python2.6/dist-packages/pptransport.py.

Maybe your job takes longer than the time in the variable above. Increase the value of it and try.

事实证明这正是问题所在。在我的应用程序中,我将 PP 用作可能需要几分钟的作业的批处理调度程序,因此我需要对此进行调整。 (默认为 30 秒)

关于python - 令人费解的并行 Python 问题 - TRANSPORT_SOCKET_TIMEOUT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4102380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com