這篇文章主要爲大家詳細介紹了Python2.7實現多進程下開發多線程示例,具有一定的參考價值,感興趣的小夥伴們可以參考一下
簡單的基於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)
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持神馬文庫。