所以我得到了 2 个 .py 文件,并尝试将测试函数从第一个导入到第二个。但每次我尝试时,我都会得到一个“BrokenProcessPool:进程池中的进程在未来正在运行或挂起时突然终止”。错误。我不知道我搞砸了什么,非常感谢帮助
并行.py:
import time
from concurrent import futures
def test(t):
time.sleep(t)
print("Ich habe {} Sekunden gewartet. Zeit {:.0f}".format(t, time.time()))
def main():
print("Startzeit: {:.0f}".format(time.time()))
start = time.perf_counter()
with futures.ThreadPoolExecutor(max_workers=3) as ex:
ex.submit(test, 9)
ex.submit(test, 4)
ex.submit(test, 5)
ex.submit(test, 6)
print("Alle Aufgaben gestartet.")
print("Alle Aufgaben erledigt.")
finish = time.perf_counter()
print("Fertig in ",round(finish-start,2)," seconds(s)")
if __name__ == "__main__":
main()
parallel2.py:
import parallel
import time
import concurrent.futures
# =============================================================================
# def test(t):
# time.sleep(t)
# return ("Ich habe {} Sekunden gewartet. Zeit {:.0f}".format(t, time.time()))
# =============================================================================
def main():
print("Startzeit: {:.0f}".format(time.time()))
start = time.perf_counter()
with concurrent.futures.ProcessPoolExecutor() as executor:
f1 = executor.submit(parallel.test, 9)
f2 = executor.submit(parallel.test, 5)
f3 = executor.submit(parallel.test, 4)
f4 = executor.submit(parallel.test, 6)
print(f1.result())
print(f2.result())
print(f3.result())
print(f4.result())
finish = time.perf_counter()
print("Fertig in ",round(finish-start,2)," seconds(s)")
if __name__ =="__main__":
main()
测试该解决方案:
从parallel.py 中删除条件
if __name__ == "__main__"
。
您将条件放入两个脚本中:
if __name__ == "__main__"
以执行 main 函数。
执行此操作时,您的脚本会检查它是否是主模块,并仅在返回为 true 时才执行该函数。
当您导入另一个脚本时,您的模块不再是“
__main__
”,因此返回不满足函数运行所施加的条件。 .