Dispy, инициирующий SharedJobCluster на вычислительном узле
Я создаю вычислительный кластер в Python, используя dispy. Один из моих вариантов использования был бы очень хорошо решен путем запуска процесса на вычислительном узле, который сам запускает распределенный процесс. Поэтому я реализовал 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 содержат "Starting cluster...", но ничего больше.
Если я проверяю состояние узла, он говорит, что на нем запущено 1 задание, но оно никогда не завершается.