以下是我的主要專案中的簡化程式。我使用的Semaphore是一次只允許兩個行程執行test函式。如果我不是瘋了,程式應該只有 10 秒的運行時間,但我有 20 秒。如何修復它以將我的程式運行時間減少到 10 秒?
注意:在 Windows 10 上使用 Sublime 進行測驗。
import time
from multiprocessing import Semaphore, Lock, Process
def test(sem):
sem.acquire()
time.sleep(5)
sem.release()
if __name__ == '__main__':
sem = Semaphore(2)
processes = []
for _ in range(4):
processes.append(Process(target=test, args=(sem,)))
start = time.perf_counter()
for process in processes:
process.start()
process.join()
end = time.perf_counter() - start
print(f'program finished in {end} secs')
輸出
program finished in 20.836512662 secs
[Finished in 21.1s]
uj5u.com熱心網友回復:
for process in processes:
process.start()
process.join()
您正在啟動每個行程,然后立即等待它完成。
這是 4 個行程,每個行程等待 5 秒。因此20秒。您的代碼中沒有實際的并行性。
您想要的是同時啟動所有流程。然后等待每個完成:
for process in processes:
process.start() # start each
for process in processes:
process.join() # wait for all to finish
結果是:
program finished in 10.129543458 secs
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/349389.html
上一篇:如何連載相冊中的第一張照片?姜戈
下一篇:openpyxl中的邊框
