簡體   English   中英

Python中的簡單多線程循環

[英]Simple multithreaded loop in Python

我有一個可運行的循環,可對每個元素列表運行一系列順序測試。 不幸的是,列表和測試數量都在迅速增長,我想看看是否可以以這樣的方式向其中添加線程,使其可以同時對幾個不同的元素執行測試。 測試本身必須按順序運行,因為每個測試可能依賴於測試返回的先前數據來執行下一個測試,但是每個元素都是獨立的,不需要其他元素的數據。 只有在每個元素完成之后,才需要對整個數據集執行某些操作。

def do_some_tests_on_a_list_of_elements(element_list):
    do_some_stuff_here_to_set_up()

    for index, element in enumerate(element_list, start=1):
        element = do_some_stuff_on_element(index, element) 

    do_some_stuff_after_each_element_has_finished()

例如,在此代碼中,我想進行設置,然后允許循環通過線程一次處理多個元素,然后在所有元素完成之后,對數據集執行最后一步。 實現這一目標的最簡單的機制是什么?

像所有有關線程的問題一樣,要准確回答,了解測試的確切功能非常重要,例如,測試是否正在使用CPU計算某些東西,或者是否正在使用網絡。

Python最常見的實現(CPython)具有全局解釋器鎖(GIL),可以防止線程並行運行python代碼。 因此,如果您的測試是基於CPU的,則無法使用線程同時運行它們。 您必須使用流程來做到這一點。

另一方面,如果您的測試基於IO(等待網絡數據包),則可以使用線程,但是最好改用異步請求。 不需要額外的線程來等待網絡,就可以不等待。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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