1
有人能幫我理解下面的代碼片段嗎?我知道我不能使用全局變量使用multiprocessing
,但我仍然對我看到的結果感到驚訝。多處理和全局文件句柄的怪異行爲
我在不同的工作進程中遠程執行的函數內使用全局文件句柄。
import multiprocessing
import os
fh = open("out.txt", "w")
def process(i):
print("i={} pid={} id(fh)={}".format(i, os.getpid(), id(fh)))
print(i, file=fh)
def main():
p = multiprocessing.Pool(3)
p.map(process, (1, 2, 3))
p.terminate()
fh.close()
main()
輸出是
i=1 pid=92045 id(fh)=4314964256
i=2 pid=92046 id(fh)=4314964256
i=3 pid=92047 id(fh)=4314964256
所以我們看到,有三個不同的進程ID預期。
什麼suprises我:
- 的unpickable文件句柄可在工作進程
- 由
id
計算的內存地址是所有工人 - 工作進程可以寫入該文件相同句柄沒有拋出異常
- 儘管如此,程序執行後文件是空的。