簡體   English   中英

在python多處理中測量浪費的時間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM