使用multiprocessing.Process尝试创建多个进程结果有一条函数外的代码被多次执行了。无法理解,请教各位为何print(os.path.basename(r'D:\small_project_小项目\help_oneself_to\os_test\os_test_01.py')) 被多次执行
import os
import multiprocessing
print(os.path.basename(r'D:\small_project_小项目\help_oneself_to\os_test\os_test_01.py'))#获取文件名
# print(os.getenv())
# function_pid=1
def worker():
print(f"子进程ID: {os.getpid()}")
if __name__ == "__main__":
# 创建三个进程对象并启动子进程
for i in range(3):
p = multiprocessing.Process(target=worker)
#print(worker())
p.start()

【以下回答由 GPT 生成】
该问题的原因是因为在Windows平台上,每个进程都会执行一次脚本中的所有顶级代码,包括导入语句和全局变量的定义等。因此,在使用multiprocessing.Process
创建多个进程时,函数外的代码会被多次执行。
为了解决这个问题,可以将函数外的代码移动到一个新的函数中,并将其放在if __name__ == "__main__":
的条件语句下。这样,函数外的代码只会在主进程中执行一次,而子进程中不会再执行。
下面是修改后的代码示例:
import os
import multiprocessing
def main():
print(os.path.basename(r'D:\small_project_小项目\help_oneself_to\os_test\os_test_01.py')) # 获取文件名
# function_pid=1
def worker():
print(f"子进程ID: {os.getpid()}")
if __name__ == "__main__":
# 创建三个进程对象并启动子进程
for i in range(3):
p = multiprocessing.Process(target=worker)
p.start()
if __name__ == "__main__":
main()
这样修改后,你会发现函数外的代码只会在主进程中执行一次,而不会被多次执行。