2

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 つのジョブを実行していると表示されますが、完了しません。

4

0 に答える 0