python多線程執行類中的靜態方法


在python 中如果通過多線程的方式執行某個方法很簡單,只需要把同步函數的第一個參數為該函數對象即可。但是如果函數對象是某個類的靜態方法,這時候如果直接使用類的該函數對象會報錯。此時需要構造一個代理的方法來實現。

如:上一個博文中的統計目錄大小的靜態類方法,如果想要查詢多目錄的空間大小,並且做成多線程個的方式。可采用下面的方法:

def dir_size_proxy(cls_instance, i):
    return cls_instance.get_dir_size(i)


class DiskSpaceUtil(object):
    @staticmethod
    def get_dir_list_size(dir_path_list):
        import multiprocessing
        pool = multiprocessing.Pool(processes=8)
        result_list = []
        for dir_path in dir_path_list:
            result_list.append(pool.apply_async(dir_size_proxy, (DiskSpaceUtil, dir_path)))
        pool.close()
        pool.join()

        size_list = [result.get() for result in result_list]
        return size_list

如圖:

同步方法 DiskSpaceUtil 類中的 get_dir_size 方法。

代理函數: dir_size_proxy

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM