为什么在使用 time.sleep 导入多处理时,字符串打印 3 次而不是 1 次?

Pin*_*ngy 0 python multiprocessing

因此,当我在与 print 后跟 time.sleep 相同的代码中导入 multiprocessing 时,它将打印字符串 3 次,而不是我请求的 1 次。我想知道为什么会发生这种情况以及如何解决这个问题(如果可能),提前谢谢您。我的代码如下。

import time
import multiprocessing

print('teeeest')
time.sleep(3)

def test1():
    print('test1')
def test2():
    print('test2')

if __name__ == '__main__':
    p1 = multiprocessing.Process(target=test1)
    p2 = multiprocessing.Process(target=test2)
    p1.start()
    p2.start()
    p1.join()
    p2.join()
Run Code Online (Sandbox Code Playgroud)

代码结果如下:

teeeest
teeeest
teeeest
test1
test2
Run Code Online (Sandbox Code Playgroud)

(注意“test1”和“test2”按预期同时发送)

Tim*_*rts 5

当您使用多处理时,Python 会使用解释器的全新副本创建一个全新的进程,并从顶部开始再次运行您的文件。任何你不想让每个孩子做的事情都需要在你的if __name__ == '__main__':范围内。