我正在使用 dispy 在 python 中创建一个计算集群。我的一个用例可以通过在本身启动分布式进程的计算节点上启动一个进程来很好地解决。因此,我已经在主调度器上实现了 SharedJobCluster,也在将发送到集群的函数中实现了(这又应该启动一系列分布式进程)。但是,当启动第二个 SharedJobCluster 时,代码会挂起并且不会越过这一行(也不会显示任何错误)。
最小工作示例:
def clusterfun():
import dispy
import test2
import logging
log_filename = 'worker.log'
logging.basicConfig(filename=log_filename,
level=logging.DEBUG,
format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
datefmt='[%m-%d-%Y %H:%M:%S]')
logging.info("Starting cluster...")
# THE FOLLOWING LINE HANGS
cluster = dispy.SharedJobCluster(test2.clusterfun2, port=0, scheduler_node='127.0.0.1')
logging.info("Started cluster...")
job = cluster.submit()
logging.info("Submitted job...")
return job()
if __name__ == '__main__':
import dispy
#
# Start the Compute cluster
#
cluster = dispy.SharedJobCluster(clusterfun, port=0, depends=['test2.py'], scheduler_node='127.0.0.1')
job = cluster.submit()
print(job())
test2.py 包含:
def clusterfun2():
return "Foo"
作为参考,我目前正在同一台机器上运行 dispyscheduler.py、dispynode 和这个 python 代码。此设置有效,除非尝试启动嵌入式分发任务。
worker.log 输出包含“正在启动集群...”,但没有其他内容。
如果我检查节点的状态,它说它正在运行 1 个作业,但它永远不会完成。