Python 3.x dispy示例程序挂起

Python 3.x dispy示例程序挂起,python-3.x,dispy,Python 3.x,Dispy,TL;DR:我无法使最基本的dispy示例代码正常运行。为什么不呢 详细信息: 我正在尝试用python进行分布式处理,我认为这个库听起来很有趣,因为它具有全面的功能集 然而,我一直试图遵循他们的基本规范程序示例,但我一无所获 我已经安装了dispy(python-mpipinstalldispy) 我转到另一台具有相同子网地址的机器,运行了python dispynode.py。它似乎有效,因为我得到了以下输出: 2016-06-14 10:33:38 dispynode-dispynode

TL;DR:我无法使最基本的
dispy
示例代码正常运行。为什么不呢

详细信息:

我正在尝试用python进行分布式处理,我认为这个库听起来很有趣,因为它具有全面的功能集

然而,我一直试图遵循他们的基本规范程序示例,但我一无所获

  • 我已经安装了dispy(
    python-mpipinstalldispy
  • 我转到另一台具有相同子网地址的机器,运行了
    python dispynode.py
    。它似乎有效,因为我得到了以下输出: 2016-06-14 10:33:38 dispynode-dispynode版本4.6.14
    2016-06-14 10:33:38 asyncoro-版本4.1,带有epoll I/O通知程序
    2016-06-14 10:33:38 dispynode-在10.0.48.54:51348为8个CPU提供服务

    输入“退出”或“退出”终止dispynode,“停止”停止
    服务,“启动”以重新启动服务,“CPU”以更改使用的CPU,
    要获得状态,请执行以下操作:

  • 回到我的客户机上,我运行从下载的示例代码,复制到这里:

当我运行这个(
python sample.py
)时,它只是挂起。通过pdb调试,我看到它最终挂起在
dispy/\uuuuu init\uuuuuu.py(117)\uuuuuu call\uuuuuuuu()
。该行显示为
self.finish.wait()
。finish只是一个python线程,因为
wait()
然后进入
lib/python3.5/threading.py(531)wait()
。一旦碰到等待按钮,它就会挂起

我尝试在客户机上运行dispynode,得到了相同的结果。我尝试了许多将节点传递到集群创建中的变体,例如:

cluster = dispy.JobCluster(compute, nodes=['localhost'])
cluster = dispy.JobCluster(compute, nodes=['*'])
cluster = dispy.JobCluster(compute, nodes=[<hostname of the remote node running the client>])
cluster=dispy.JobCluster(计算,节点=['localhost']))
cluster=dispy.JobCluster(计算,节点=['*'])
cluster=dispy.JobCluster(计算,节点=[])
我尝试过在未注释的
cluster.wait()行中运行,得到了相同的结果

当我添加日志记录(
cluster=dispy.JobCluster(compute,loglevel=10)
)时,我在客户端获得了以下输出:

2016-06-14 10:27:01 asyncoro-版本4.1,带有epoll I/O通知程序
2016-06-14 10:27:01 dispy-dispy客户电话:51347 2016-06-14 10:27:01 dispy-将故障恢复信息存储在“\u dispy\u 20160614102701”中
2016-06-14 10:27:01发布-未决工作:0
2016-06-14 10:27:01发布-待定工作:1
2016-06-14 10:27:01发布-待定工作:2
2016-06-14 10:27:01发布-待定工作:3
2016-06-14 10:27:01发布-待定工作:4
2016-06-14 10:27:01发布-待定工作:5 2016-06-14 10:27:01发布-待定工作:6
2016-06-14 10:27:01发布-待定工作:7
2016-06-14 10:27:01发布-待定工作:8
2016-06-14 10:27:01发布-待定工作:9
2016-06-14 10:27:01发布-待定工作:10

这似乎并不出乎意料,但并不能帮助我弄清楚作业为什么没有运行

值得一提的是,以下是_dispy_20160614102701.bak:

"u簇",(0207)
“compute_1465918021755”(512,85)

同样地,_dispy_20160614102701.dir:

"u簇",(0207)
“compute_1465918021755”(512,85)


除非我使用的是不稳定的版本,否则我无法猜测。

如果您只是在客户端上运行sample.py,请在主语句中更改以下内容:

cluster=dispy.JobCluster(计算,节点=['nodeip_1','nodeip_2',…,'nodeip_n])

然后在IDE中或通过shell运行它


我希望这会有所帮助。

在执行
python sample.py
之前,
dispynode.py
应该仍然在本地主机或其他机器上运行(请注意,如果不想指定复杂选项,其他机器应该在同一网络中)

我遇到了同样的问题,并通过以下方式解决:

  • 打开一个终端并执行:
    $dispynode.py
    (不要终止它)
  • 打开第二个终端并执行:
    $python sample.py

不要忘记函数计算包括等待特定时间,输出应在执行sample.py后至少20秒出现

首次在网络上设置和使用dispy时,我发现在创建作业群集时必须指定客户端节点IP,请参见以下内容:

cluster = dispy.JobCluster(compute, ip_addr=your_ip_address_here)

看看这是否有帮助。

谢谢你的回答。我以前试过
nodes=['nodename']
,但没有成功。根据您的建议,我尝试了
节点=['nodeip']
,但它仍然挂起。由于某些原因,它从不与客户端通信。如果您的群集位于同一个本地网络上。在节点上,尝试以这种方式启动dispynode脚本。python dispynode.py-i pcname(或ip地址)然后按照我在上面的注释中所述运行脚本。使用这两个脚本中的任何一个都会给出
OSError:[Errno 99]无法分配请求的地址
(在dispynode.py的第252行中:slf.tcp\u sock.bind((ip\u addr,node\u port)).我也有这类问题。我想知道这个问题是否有解决方案?我还没有找到。事实上,我放弃了dispy,所以我甚至没有花时间悬赏。我也尝试过,表面上这正是我需要的,但它有一个非常奇怪的。我放弃了,决定使用ssh的基本popen,并编写e我自己的调度程序。@ThomasGuenet您提出了一个我将拒绝的建议编辑。这个编辑是不合适的,因为您正在更改我实际说过的内容。我确实运行了
python dispy.py
,而不仅仅是
dispy.py
。它们的运行方式不同,因为您的方式是作为一个模块。这种差异可能是程序运行的原因ram挂起。因此,您的编辑不合适,但可能是一个很好的答案。请将其作为答案写下来,说明仅运行
dispy.py
而不是
python dispy.py
将如何解决问题。如果您令人信服地显示它,您将无法回答
cluster = dispy.JobCluster(compute, ip_addr=your_ip_address_here)