Что я пропустил при написании среды параллельного программирования?

Пояснение : В соответствии с некоторыми комментариями, я должен пояснить, что это предназначено как простая структура для разрешить выполнение программ, которые естественно параллельны (так называемые недопустимо параллельные программы). Это не и никогда не будет решением для задач, требующих связи или синхронизации между процессами.

I ' Мы искали простую среду параллельного программирования на основе процессов на Python, которая могла бы выполнять функцию на нескольких процессорах в кластере, с основным критерием, заключающимся в том, что она должна иметь возможность выполнять неизмененный код Python. Самым близким, что я нашел, был Parallel Python , но pp делает некоторые довольно забавные вещи, которые могут привести к тому, что код не будет выполняться в правильном контексте (с соответствующими импортированными модулями и т.д.).

Мне наконец надоело искать, поэтому я решил написать свой. То, что я придумал, на самом деле довольно просто. Проблема в том, что я не уверен, что то, что я придумал, просто, потому что я многое не придумал. Вот что делает моя программа:

  • У меня есть сервер заданий, который раздает задания узлам в кластере. 'moduleName': 'some_module', 'funcName': 'someFunction', 'localVars': {'someVar': someVal, ...}, 'globalVars': {'someOtherVar': someOtherVal, ...}, 'modulePath': '/ a / путь / к / a / каталогу', customPathHasPriority: aBoolean, 'аргументы' :( аргумент1, аргумент2, ...), 'kwargs': {'kw1': val1, 'kw2': val2, ...} }
  • moduleName и funcName являются обязательными, остальные - необязательными.

  • Сервер узла берет этот словарь и выполняет:

     sys.path.append (modulePath)
    globals () [moduleName] = __ import __ (moduleName, localVars, globalVars)
    returnVal = globals () [имя модуля] .__ dict __ [имя_функции] (* аргументы, ** kwargs)
    
  • Получив возвращаемое значение, сервер затем отправляет его обратно на сервер заданий, который помещает его в потокобезопасную очередь.

  • Когда последнее задание возвращается, сервер заданий записывает вывод в файл и завершает работу.

Я уверен, что есть мелочи, которые необходимо решить, но есть ли что-то очевидное неправильное в этом подходе? На первый взгляд, это кажется надежным, требуя только, чтобы узлы имели доступ к файловой системе (ам), содержащей файл .py и зависимости. Использование __ import __ имеет то преимущество, что код в модуле запускается автоматически, и поэтому функция должна выполняться в правильном контексте.

Мы будем очень благодарны за любые предложения или критику.

РЕДАКТИРОВАТЬ: Я должен упомянуть, что у меня работает бит выполнения кода, но сервер и сервер заданий еще не написаны.

16
задан Chinmay Kanchi 8 November 2010 в 11:33
поделиться