簡單的基於Python2.7版本的多程序下開發多執行緒的示例
阿新 • • 發佈:2018-11-20
簡單的基於Python2.7版本的多程序下開發多執行緒的示例
可以使得程式執行效率至少提升10倍
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @Time : 2018/10/24 @Author : LiuXueWen @Site : @File : transfer.py @Software: PyCharm @Description: """ import os import traceback import threading from multiprocessing import Pool from multiprocessing.dummy import Pool as ThreadPool # 相容python2.7上多執行緒的bug,不加上下面的反代理程式不能正常執行 def proxy(cls_instance, i): return cls_instance.multiprocess_thread(i) def proxy2(cls_instance, i): return cls_instance.file_operation(i) class file2transfer(): # 多程序執行程式 def multiprocessingTransferFiles(self): try: # 建立程序池 p = Pool() //引數末尾必須加上逗號 p.apply_async(proxy, args=(self, self.root_path,)) p.close() p.join() except Exception as e: print(e) # 每個程序下的多執行緒執行,執行緒數等於當前機器的核數 def multiprocess_thread(self, root_path): try: # 建立執行緒鎖 lock = threading.RLock() lock.acquire() # 獲取每個檔案 for pfile in os.listdir(root_path): # 獲取檔案的完整路徑 full_file_path = os.path.join(root_path, pfile) # 多執行緒讀寫檔案 p = ThreadPool() # 執行執行緒 p.apply_async(proxy2, args=(self, full_file_path,)) p.close() p.join() except Exception as e: print(e) finally: # 釋放執行緒鎖 lock.release() # 對每個資料夾下的每個檔案進行操作 def file_operation(self, full_file_path): try: // TODO 真正需要單獨執行的操作 pass except Exception as e: print(e)