- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
以下代码对我来说似乎无法正常工作。它需要在网络上的另一台计算机上启动 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/
我是一名优秀的程序员,十分优秀!