[英]Why does Python ignore source files in favor of pyc files sometimes?
我有一種情況,我在磁盤上快速更改Python源文件,並且對於每次更改,在子進程中使用Python運行它們(它用於變異測試工具)。 我發現在某些情況下,Python子__pycache__
要么沒有看到更改,要么忽略它以支持__pycache__
的內容。 這是一個例子:
from pathlib import Path
import subprocess
workspace = Path('workspace')
workspace.mkdir(exist_ok=True)
for i in range(3):
with open(workspace / 'code.py', mode='wt') as f:
f.write(f"print({i})")
proc = subprocess.run(
'python -m code'.split(),
stdout=subprocess.PIPE,
cwd='workspace')
print(i, proc.stdout.decode('utf-8').strip())
我希望這打印:
0 0
1 1
2 2
但通常它打印的東西如下:
0 0
1 0
2 0
要么
0 0
1 1
2 1
也就是說,在某些時候,我寫入磁盤的更改不會被Python子進程看到。
我已嘗試過各種嘗試使用os.fsync
,文件句柄上的flush()
等來刷新磁盤更改。 唯一似乎有所作為的是在文件句柄關閉后放置一個很大的time.sleep()
。
我可以通過設置PYTHONDONTWRITEBYTECODE
告訴Python不使用pycs,但此時我想知道發生了什么。
所以,我是對的,這只是一些無法刷新到磁盤? 或者是否有我正在戰斗的Python的錯誤/功能?
不需要特殊的刷新,但除了禁用或刪除.pyc
,睡眠是唯一的答案:如果寫入它們之間的時間足夠小, .pyc
看起來不會比.py
看起來早 。 “足夠小”取決於文件系統和操作系統,但它可能很容易就是一秒鍾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.