【问题标题】:Puzzling Parallel Python Problem - TRANSPORT_SOCKET_TIMEOUT令人费解的并行 Python 问题 - TRANSPORT_SOCKET_TIMEOUT
【发布时间】:2011-03-20 02:38:52
【问题描述】:

以下代码对我来说似乎无法正常工作。它需要在您网络上的另一台计算机上启动 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。我计划一有时间迁移我的应用程序就搬回去。标题编辑以反映解决方案。

【问题讨论】:

  • @Thomas:我们是盲目的,没有关于作业和其他执行调试细节的额外信息。为什么不尝试 pp 中的示例之一,看看它们是否适合您。那将是一个好的开始,然后使用简单的函数并使用您的代码提交作业。看看有没有什么区别。这样您就可以缩小问题的范围。
  • @Thomas:示例链接:parallelpython.com/content/view/17/31
  • 标题应该是“令人费解的并行 Python 问题”。
  • 我想知道仅基于标题中的头韵会获得多少观看次数:)
  • @zourtney:我至少知道一个。

标签: python parallel-processing parallel-python


【解决方案1】:

Parallel Python 论坛的 Bagira 的回答:

每次计算需要多长时间 工作吗?看看变量 TRANSPORT_SOCKET_TIMEOUT 在 /usr/local/lib/python2.6/dist-packages/pptransport.py.

也许你的工作需要的时间比 上面变量中的时间。增加 它的价值和尝试。

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

【讨论】:

    【解决方案2】:

    可能是库允许重复,因为某些节点滞后,剩余任务将有很长的尾要完成。通过复制任务,它可以绕过慢速节点,您应该只取最先完成的结果。您可以通过为每个任务添加一个唯一的 ID 来解决此问题,并且只接受每个任务返回的第一个 ID。

    【讨论】:

    • 嗯,我还没有观察或读过并行 python 的这种行为,但这是一种可能性。然而,在我的情况下,这些作业似乎在同一台计算机上重复执行 - 我想如果它没有正确返回,并且服务器发现客户端不忙,所以再次分配作业。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2014-02-22
    • 1970-01-01
    • 2011-12-20
    • 2011-07-20
    • 1970-01-01
    • 2011-01-22
    相关资源
    最近更新 更多