Запуск сценария Python одновременно по сети.Это нормально? - PullRequest
1 голос
/ 13 мая 2011

У нас есть скрипт Python + связанные модули на сетевом диске. Мы запускаем этот скрипт одновременно с нескольких компьютеров одновременно.

Иногда один из них случайно выходит из строя с такой ошибкой:

Traceback (most recent call last):
  File "\\chifs02.int.tt.local\group\Development\Server Products\Automation\repos\mksutils\fetch.py", line 16, in <module>
    from scripts import write_set_environment
NameError: Can't find file for module scripts
(filename \\chifs02.int.tt.local\group\Development\Server Products\Automation\repos\mksutils\scripts.pyc)

Одна странность, которую я заметил, заключалась в том, что файл .py последний раз изменялся несколько месяцев назад, но .pyc всего несколько часов, хотя с тех пор он запускался по крайней мере ежедневно.

Я никогда не видел эту NameError: Can't find file for module scripts ошибку раньше, и Google не особо помогает.

Все задействованные компьютеры работают под управлением Windows.

Ответы [ 2 ]

4 голосов
/ 13 мая 2011

Не делайте этого, когда «это» имеет несколько компьютеров, пытающихся использовать один и тот же .pyc.

Вероятная причина, по которой pyc модифицируется, заключается в том, что у вас, вероятно, есть несколько разные версииPython на разных компьютерах.Один пишет свою версию .pyc, а другой приходит и видит, что это не то, что он ожидал, и пишет свою собственную версию.

Меня совсем не удивило бы, что странные ошибки возможны вСитуация, когда разные компьютеры одновременно пытаются работать с одинаковыми файлами .pyc.Это приглашение для условий гонки, так как механизм блокировки не используется.

Либо каждая система скопирует скрипт в локальное место перед его запуском, либо отключит генерацию .pyc (флаг командной строки -B илиустановите переменную окружения PYTHONDONTWRITEBYTECODE).

2 голосов
/ 13 мая 2011

Это странная ошибка (я никогда не видел ее в дикой природе).

Моя гипотеза состоит в том, что это связано с тем, что один узел восстанавливает файл pyc, в то время как другой узел пытается посмотреть на него.,Попытка удаления файлов pyc и указание -B в командной строке Python:

-B     : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...