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

首頁 > 開發 > Python > 正文

python實現通過隊列完成進程間的多任務功能示例

2024-09-09 19:02:24
字體:
來源:轉載
供稿:網友

本文實例講述了python實現通過隊列完成進程間的多任務功能。分享給大家供大家參考,具體如下:

1.通過隊列完成進程間的多任務

import multiprocessingdef download_data(q):  """下載數據"""  # 模擬從網上下載數據  data = [11, 22, 33, 44]  # 向隊列中寫入數據  for temp in data:    q.put(temp)  print("----數據下載完成并且已存入隊列----")def analysis_data(q):  """數據處理"""  waitting_analysis_data = list()  # 從隊列中獲取數據  while True:    data = q.get()    waitting_analysis_data.append(data)    if q.empty():      break  print(waitting_analysis_data)def main():  # 1.創建一個隊列  q = multiprocessing.Queue()  q1 = multiprocessing.Process(target=download_data, args=(q,))  q2 = multiprocessing.Process(target=analysis_data, args=(q,))  q1.start()  q2.start()if __name__ == '__main__':  main()

在這里插入圖片描述

2.進程池pool

在程序實際處理問題過程中,忙時會有成千上萬的任務需要被執行,閑時可能只有零星任務。那么在成千上萬個任務需要被執行的時候,我們就需要去創建成千上萬個進程么?首先,創建進程需要消耗時間,銷毀進程也需要消耗時間。第二即便開啟了成千上萬的進程,操作系統也不能讓他們同時執行,這樣反而會影響程序的效率。因此我們不能無限制的根據任務開啟或者結束進程。那么我們要怎么做呢?

在這里,要給大家介紹一個進程池的概念,定義一個池子,在里面放上固定數量的進程,有需求來了,就拿一個池中的進程來處理任務,等到處理完畢,進程并不關閉,而是將進程再放回進程池中繼續等待任務。如果有很多任務需要執行,池中的進程數量不夠,任務就要等待之前的進程執行任務完畢歸來,拿到空閑進程才能繼續執行。也就是說,池中進程的數量是固定的,那么同一時間最多有固定數量的進程在運行。這樣不會增加操作系統的調度難度,還節省了開閉進程的時間,也一定程度上能夠實現并發效果。

案例:

from multiprocessing import Poolimport os, time, randomdef worker(msg):  t_start = time.time()  print("進程%s開始執行,進程號為%d" % (msg, os.getpid()))  # random.random()隨機生成0-1之間的浮點數  time.sleep(random.random()*2)  t_stop = time.time()  print("進程",msg,"執行完成,耗時%0.2f" % (t_stop-t_start))def main():  # 定義一個進程池,最大進程數為3  po = Pool(3)  for i in range(10):    # Pool().apply_async(要調用的目標,(傳遞給目標的參數元組,))    # 每次循環將會用空閑出來的子進程去調用目標    po.apply_async(worker,(i,))  print("----start----")  # 關閉進程池,關閉后po不再接受新的請求  po.close()# 等待po中所有子進程執行完成,必須放在close語句之后  po.join()  print("----end----")if __name__ == '__main__':  main()

在這里插入圖片描述

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python進程與線程操作技巧總結》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》、《Python+MySQL數據庫程序設計入門教程》及《Python常見數據庫操作技巧匯總》

希望本文所述對大家Python程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉安市| 达州市| 南阳市| 龙游县| 无棣县| 隆回县| 嘉祥县| 临西县| 周至县| 于都县| 屯门区| 明光市| 榆树市| 巴东县| 乐都县| 河间市| 南康市| 沁阳市| 凤庆县| 峨边| 安多县| 布拖县| 广宁县| 营山县| 凤城市| 迭部县| 宁津县| 临汾市| 新化县| 彰化县| 石景山区| 安乡县| 拜城县| 禄劝| 宝坻区| 怀化市| 汽车| 光山县| 谷城县| 芷江| 科技|