当多个Python进程创建.pyc文件时,是否会出现问题?

时间:2017-11-17 04:50:10

标签: python

假设我从公共目录同时启动了大量Python进程。

如果最近修改了Python源文件,解释器将编译.pyc文件。

如果有多个进程同时尝试为同一个Python源文件构建.pyc,这是否会造成竞争条件或其他问题?

Python(或cpython具体)会在编译时保证并发保护吗?

我知道可以用来避免这种情况的方法,我只想了解这个用例是否有问题。

1 个答案:

答案 0 :(得分:5)

通常不会,当CPython write bytecode cache file时,它首先写入临时文件,然后move to the desired location with os.replace。如果OS /文件系统没有在中间崩溃,nodemon.json使用rename(2) system call底层,os.replace是原子的。因此,字节码文件写入是原子的。

恕我直言你应该担心的是字节码缓存文件陈旧检查。 Python使用源文件rename()(和文件大小)检查缓存文件的新鲜度。需要注意的是,python使用的stat.mtime分辨率为one second,因此如果一个进程修改了源文件,而另一个进程在同一秒内写入缓存文件,则字节码缓存文件与源代码不一致以后不会刷新。好消息是pep-0552被接受,改为基于散列的缓存文件,这将处理这种情况。