gpt4 book ai didi

python - 为什么在使用 concurrent.futures.ProcessPoolExecuter() 进行多处理期间不止一次打印此消息?

转载 作者:可可西里 更新时间:2023-11-01 13:25:58 24 4
gpt4 key购买 nike

“我应该只出现一次”这句话应该只出现一次。我无法理解为什么它又出现了 3 次...我很清楚我的代码正在执行 3 个进一步的进程。但是在这 3 个进程中,只有 funktion0() 被调用。为什么声明 “我应该只出现一次” 包含在这额外的 3 个进程中?有人可以解释一下吗?

代码:

from datetime import datetime
#print(datetime.now().time())

from time import time, sleep
#print(time())
print("I should appear only once")
from concurrent import futures


def funktion0(arg0):
sleep(arg0)
print(f"ich habe {arg0} sek. gewartet, aktuelle Zeit: {datetime.now().time()}")

if __name__=="__main__":

with futures.ProcessPoolExecutor(max_workers=3) as obj0:
obj0.submit(funktion0, 5)
obj0.submit(funktion0, 10)
obj0.submit(funktion0, 15)
obj0.submit(funktion0, 20)
print("alle Aufgaben gestartet")

print("alle Aufgaben erledigt")

预期输出:

I should appear only once
alle Aufgaben gestartet
ich habe 5 sek. gewartet, aktuelle Zeit: 18:32:51.926288
ich habe 10 sek. gewartet, aktuelle Zeit: 18:32:56.923648
ich habe 15 sek. gewartet, aktuelle Zeit: 18:33:01.921168
ich habe 20 sek. gewartet, aktuelle Zeit: 18:33:11.929370
alle Aufgaben erledigt

实际输出:

I should appear only once
alle Aufgaben gestartet
I should appear only once
I should appear only once
I should appear only once
ich habe 5 sek. gewartet, aktuelle Zeit: 18:32:51.926288
ich habe 10 sek. gewartet, aktuelle Zeit: 18:32:56.923648
ich habe 15 sek. gewartet, aktuelle Zeit: 18:33:01.921168
ich habe 20 sek. gewartet, aktuelle Zeit: 18:33:11.929370
alle Aufgaben erledigt

最佳答案

这是 Windows 的经典问题 (RuntimeError on windows trying python multiprocessing),只是不那么引人注目。

当您在 Windows 上使用多处理时,进程不是 fork 而是重复(因为 fork 在 Windows 操作系统中不存在)使用一些棘手的机制来“模拟”fork 但不准确,因为操作系统不允许 ( What's the best way to duplicate fork() in windows? )。

所以语句的打印次数与进程的次数一样多,除非你用 __name__ == "__main__" 保护它

(您也可以通过在该范围内移动大多数 import 语句来加速 workers 启动)

关于python - 为什么在使用 concurrent.futures.ProcessPoolExecuter() 进行多处理期间不止一次打印此消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54495669/

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