2011-05-13 133 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 
相关问题