2012-04-10 2 views
2

У меня есть сценарий python, который просматривает рабочее пространство запроса веб-службы. Каждый раз, когда клиент отправляет задание на мой веб-сервис, в хорошо известном месте создается уникальная папка заданий. У меня есть сценарий, опросив это хорошо известное местоположение для папки с «флагом» (пустой текстовый файл с определенным именем, который указывает, что обработка завершена в этом задании).Вызов сценария рабочего сценария python из мастер-скрипта как нескольких экземпляров

В настоящее время мой скрипт может вызвать рабочий сценарий для обработки содержимого новой папки, но должен ждать завершения рабочего сценария, прежде чем он сможет продолжить передачу папок.

Мой вопрос в том, какие параметры имеют новые экземпляры сценария рабочего процесса, которые управляют и возвращают управление диспетчеру. Создает ли исполняемый файл python, который принимает параметры рабочего сценария и может ли сценарий менеджера вызвать его через работу в командной строке? Или создать рабочий сценарий в классе, который может работать с многочисленными процессами инсталляции?

После того, как рабочий сценарий завершен, ему не нужно отправлять сообщение обратно в задание сценария менеджера. Он выполнит это, отбросив текстовый файл в каталог. Хотя теперь, когда я думаю об этом, мне придется где-то держать, чтобы каждый каталог заданий был передан, потому что для рабочего сценария потребуется 1,5 минуты.

Любые советы/ссылки были бы высоко оценены.

ответ

0

Прежде всего, я согласен с тем, что вам нужно поставить флаг в свои каталоги, указав, что в каталоге есть. Мастер-скрипт должен быть единственным, чтобы установить флаг, или вы рискуете условиями гонки (два рабочих сценария, принимающих один и тот же каталог одновременно). Вы можете использовать тот же файл; мастер-скрипт создает его пустым (что означает «в процессе»), а рабочий сценарий записывает в него 1B (что означает «сделано»). Таким образом, мастер-скрипт должен проверять наличие флага.

Возвращаясь к вашему вопросу:

  • вы действительно можете сделать ваш работник скрипт в отдельную программу, и называем его через модуль subprocess;

  • вы можете сделать его нитью (с модулем threading [2]), , который несколько проще в кодировке; это может быть неэффективным из-за GIL, , но если ваш рабочий сценарий имеет высокую степень привязки к IO, это не должно быть слишком большой проблемой;

  • , если вы используете Python 3, вы можете захотеть взглянуть на модуль multiprocessing [3]
    , который я никогда не использовал, но, кажется, перемешайте удобство использования многопоточности, не будучи уязвимой к GIL; похоже, что он не полностью портативен.

Надежда это помогает

  • [1] http://docs.python.org/library/subprocess.html
  • [2] http://docs.python.org/library/threading.html
  • [3] http://docs.python.org/dev/library/multiprocessing.html