gpt4 book ai didi

python - mac 上的多处理导入模块

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:34 30 4
gpt4 key购买 nike

模块在导入之前存在于新进程中,在 osx 上使用 python-multiprocessing。
下面是一个例子:


import multiprocessing
import sys
import os

print 'importing module'
def main():
import uuid
print 'setting var'
uuid.some_variable = True

def process(name):
print 'uuid module loaded:', 'uuid' in sys.modules
print 'process pid', os.getpid()
import uuid
var = uuid.some_variable
print 'var exists on mac', var

if __name__ == '__main__':
print 'main pid', os.getpid()
main()
p = multiprocessing.Process(target=process, args=('test',))
p.start()
p.join()


Windows/Linux 上的输出是我所期望的。脚本导入两次,uuid.some_variable不存在,导入前未加载uuid:

importing modulemain pid 4352setting varimporting moduleuuid module loaded: Falseprocess pid 4988AttributeError: 'module' object has no attribute 'some_variable'

但是在osx上,脚本只会import一次,uuid是import前加载的,uuid.some_variable存在于新进程中:

importing modulemain pid 4399setting varuuid module loaded: Trueprocess pid 4400var exists on mac True

不知何故,来自主进程的 uuid 模块进入了子进程,而没有导入它。
我错过了什么,这是一个错误,还是 mac 有充分的理由这样做?
模块是如何进入子进程的?

最佳答案

问题是 multiprocessing 在 unix 上使用 os.fork。所以子进程成为主进程的副本。不知道 Fedora 是怎么回事,但它也不应该在 linux 上运行。
似乎没有任何简单的方法来解决它。

关于python - mac 上的多处理导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6573646/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com