проблема многопоточности Python в cronjob - PullRequest
3 голосов
/ 20 июля 2011

У меня есть программа на Python, которая использует ThreadPool для многопоточности.Программа является одним шагом в сценарии оболочки.Когда я вручную запускаю сценарий оболочки в командной строке, весь поток работает как положено.Однако, когда я выполняю скрипт оболочки как cronjob, создается впечатление, что поток переходит к следующим шагам до того, как шаги многопоточности python полностью завершены.

Внутри программы python я вызываю AsyncResult.get (timeout) дождаться возвращения всех результатов, прежде чем двигаться дальше.

1 Ответ

0 голосов
/ 14 марта 2012

Запустите вашу программу через batch(1) (см. Вывод команды man batch). Если это работает нормально, а версия cron - нет, то это почти наверняка проблема с настройкой переменной среды. Чтобы убедиться в этом, запустите printenv из интерактивной оболочки, чтобы проверить свою среду там. Затем сделайте то же самое внутри crontab (вам просто нужно временно установить для него дополнительную запись cron). Попробуйте установить переменные в вашем скрипте оболочки перед вызовом Python.

С другой стороны, если он не работает через batch(1), это может быть связано с файлами, которые открыт в вашем коде. Попробуйте запустить скрипт оболочки с перенаправленным вводом из / dev / null и выводом в файл:

$ /usr/local/bin/myscript </dev/null >|/tmp/outfile.txt 2>&1
...