[英]Measuring wasted time in python multiprocessing
有沒有一種方法可以衡量一個multiprocessing.Pool
過程的每個子進程多少時間, multiprocessing.Pool
花在等待輸入上的時間與他們花在處理數據上的時間上是多少?
讓我們看一個簡單的示例,它並行處理文件的行:
from multiprocessing import Pool
pool = Pool(processes=16)
with open('a_large_file.txt', 'r') as f:
for foo in pool.imap_unordered(a_slow_function, f, chunksize=100)
do_something_with(foo)
根據a_slow_function
需要多長時間,我們從f
讀取數據的速度以及塊的大小,我的子a_slow_function
最終可能會在等待數據的同時搖動手指。 我可以測量嗎?
我最好的猜測,到目前為止是包裝cProfile.runctx
周圍a_slow_function
。 這樣就為每個工作人員生成了一個配置文件,然后可以將其與腳本的總運行時間進行比較。 但是, do_something_with(foo)
會使結果傾斜,因此我必須考慮到這一點。 有沒有更清潔的方法可以做到這一點?
注意:我不介意解決方案是否涉及特定於Linux的工具。
您可以嘗試使用line_profiler
(線路分析器)來獲取時間
for foo in pool.imap_unordered(a_slow_function, f, chunksize=100)
行和a_slow_function
的總時間,然后比較這兩個數字。
我不確定這是否是個好主意,但是仍然是個好主意。
您也可以嘗試單獨計時,例如查看可以多快讀取文件中的行:
例如。
for line in f: pass
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.