dispy を使用して Python でコンピューティング クラスターを作成しています。私の使用例の 1 つは、分散プロセスを開始するコンピューティング ノードでプロセスを開始することで、うまく解決できます。そのため、プライマリ スケジューラに SharedJobCluster を実装し、クラスタに送信される関数にも実装しました (一連の分散プロセスを開始する必要があります)。ただし、2 番目の 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 の出力には「Starting cluster...」が含まれていますが、他には何も含まれていません。
ノードのステータスを確認すると、1 つのジョブを実行していると表示されますが、完了しません。