报错代码
from multiprocessing import Process
if __name__ == "__main__":
def func():
writer = MultiProcessFileWriter(r"E:\temp\test.txt")
writer.write("1234")
for _ in range(10):
process = Process(target=func)
process.start()
报错信息
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Program Files\Python39\lib\multiprocessing\spawn.py", line 116, in spawn_main
exitcode = _main(fd, parent_sentinel)
File "C:\Program Files\Python39\lib\multiprocessing\spawn.py", line 126, in _main
self = reduction.pickle.load(from_parent)
AttributeError: Can't get attribute 'func' on <module '__mp_main__' from '...'>
报错原因
因为在子进程中,__name__
等于 "__mp_main__"
而不是 __main__
,所以 if __name__ == "__main__":
缩进中的逻辑不会被运行,这就导致 func
函数无法被定义。
修改方法
from multiprocessing import Process
def func():
writer = MultiProcessFileWriter(r"E:\temp\test.txt")
writer.write("1234")
if __name__ == "__main__":
for _ in range(10):
process = Process(target=func)
process.start()