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

Mik*_*ike 0 python

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

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

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

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

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

geo*_*xsh 5

一般没有,当CPython 写入字节码缓存文件时,它首先写入临时文件,然后移动到所需的位置os.replace.os.replace使用rename(2)系统调用底层,rename()如果OS /文件系统没有在中间崩溃,则是原子的.结果字节码文件写入是原子的.

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