2011-05-13 130 views
1

我們在網絡驅動器上有一個python腳本+關聯模塊。我們同時從幾臺電腦同時運行這個腳本。在網絡上同時運行python腳本。這個可以嗎?

有時,他們中的一個隨機失敗,這樣的錯誤:

,我注意到的是,在.py文件的最後修改個月前,但.pyc文件只有小時大,儘管
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) 

一個怪胎從那時起至少每天運行一次。

我以前從來沒有見過這個NameError: Can't find file for module scripts錯誤,而谷歌也沒有太大的幫助。

所涉及的所有計算機都運行Windows。

+1

在Python 3.x中解決了這個問題,它將'.pyc'文件放在一個單獨的'__pycache__'目錄中,併爲它們編譯了特定的Python風格。 – katrielalex 2011-05-13 18:25:23

+0

@katrielalex很高興知道,但出於若干技術原因,在可預見的將來,我們將不會使用python 2.6或2.7。 – 2011-05-13 18:31:41

回答

4

不要這樣,這裏的「說」是有多臺計算機試圖使用相同的.pyc文件(S)。

pyc被修改的可能原因是你可能在不同的計算機上有不同的Python版本。一個人寫的是.pyc的版本,另一個出現,並且看到它不是它所期望的,並且寫了它自己的版本。

在不同的計算機同時嘗試處理相同的.pyc文件的情況下,我很驚訝地發現奇怪的錯誤是可能的。這是對競賽條件的邀請,因爲沒有使用鎖定機制。

要麼每個系統在運行腳本之前將腳本複製到本地,要麼禁用.pyc生成(-B命令行標誌或設置PYTHONDONTWRITEBYTECODE環境變量)。

2

這是一個奇怪的錯誤(我從來沒有見過野外)。

我的假設是它必須與一個節點重新生成pyc文件,而另一個節點試圖查看它。試圖刪除pyc文件和Python的命令行上指定-B

-B  : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x 
相關問題