国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python使用多進程的實例詳解

2020-02-15 23:00:49
字體:
來源:轉載
供稿:網友

python多線程適合IO密集型場景,而在CPU密集型場景,并不能充分利用多核CPU,而協程本質基于線程,同樣不能充分發揮多核的優勢。

針對計算密集型場景需要使用多進程,python的multiprocessing與threading模塊非常相似,支持用進程池的方式批量創建子進程。

•創建單個Process進程(使用func)

只需要實例化Process類,傳遞函數給target參數,這點和threading模塊非常的類似,args為函數的參數

import osfrom multiprocessing import Process# 子進程要執行的代碼def task(name):  print('run child process %s (%s)...' % (name, os.getpid()))if __name__ == '__main__':  print('parent process %s.' % os.getpid())  p = Process(target=task, args=('test',))  p.start()  p.join()  print('process end.') 

•創建單個Process進程(使用class)

繼承Process類,重寫run方法創建進程,這點和threading模塊基本一樣

import multiprocessingimport osfrom multiprocessing import current_processclass Worker(multiprocessing.Process):  def run(self):    name = current_process().name # 獲取當前進程的名稱    print('run child process <%s> (%s)' % (name, os.getpid()))    print('In %s' % self.name)    returnif __name__ == '__main__':  print('parent process %s.' % os.getpid())  p = Worker()  p.start()  p.join()  print('process end.')   * 停止進程

terminate()結束子進程,但是會導致子進程的資源無法釋放掉,是不推薦的做法,因為結束的時候不清楚子線程的運行狀況,有很大可能性導致子線程在不恰當的時刻被結束。

import multiprocessingimport timedef worker():  print('starting worker')  time.sleep(0.1)  print('finished worker')if __name__ == '__main__':  p = multiprocessing.Process(target=worker)  print('執行前:', p.is_alive())  p.start()  print('執行中:', p.is_alive())  p.terminate() # 發送停止號  print('停止:', p.is_alive())  p.join()  print('等待完成:', p.is_alive()) 

•直接創建多個Process進程

import multiprocessingdef worker(num):  print(f'Worker:%s %s', num)  returnif __name__ == '__main__':  jobs = []  for i in range(5):    p = multiprocessing.Process(target=worker, args=(i,))    jobs.append(p)    p.start() 

•使用進程池創建多個進程

在利用Python進行系統管理的時候,特別是同時操作多個文件目錄,或者遠程控制多臺主機,并行操作可以節約大量的時間。當被操作對象數目不大時,可以直接利用multiprocessing中的Process動態成生多個進程,十幾個還好,但如果是上百個,上千個目標,手動的去限制進程數量卻又太過繁瑣,此時可以發揮進程池的功效。

Pool可以提供指定數量的進程供用戶調用,當有新的請求提交到pool中時,如果池還沒有滿,那么就會創建一個新的進程用來執行該請求;但如果池中的進程數已經達到規定最大值,那么該請求就會等待,直到池中有進程結束,才會創建新的進程來它。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 六安市| 花莲县| 东港市| 马尔康县| 体育| 孟州市| 白山市| 玛多县| 济阳县| 土默特左旗| 井研县| 方正县| 安顺市| 炉霍县| 雅江县| 台州市| 丰县| 驻马店市| 海口市| 垦利县| 司法| 渝中区| 宜君县| 伊川县| 安泽县| 南召县| 舞阳县| 当涂县| 大石桥市| 长海县| 龙门县| 永仁县| 蕉岭县| 新龙县| 临安市| 葵青区| 大厂| 黎城县| 南雄市| 南宫市| 仙居县|