日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python基于concurrent模塊實現多線程

瀏覽:27日期:2022-06-22 10:27:08
引言

之前也寫過多線程的博客,用的是 threading ,今天來講下 python 的另外一個自帶庫 concurrent 。concurrent 是在 Python3.2 中引入的,只用幾行代碼就可以編寫出線程池/進程池,并且計算型任務效率和 mutiprocessing.pool 提供的 poll 和 ThreadPoll 相比不分伯仲,而且在 IO 型任務由于引入了 Future 的概念效率要高數倍。而 threading 的話還要自己維護相關的隊列防止死鎖,代碼的可讀性也會下降,相反 concurrent 提供的線程池卻非常的便捷,不用自己操心死鎖以及編寫線程池代碼,由于異步的概念 IO 型任務也更有優勢。

concurrent 的確很好用,主要提供了 ThreadPoolExecutor 和 ProcessPoolExecutor 。一個多線程,一個多進程。但 concurrent 本質上都是對 threading 和 mutiprocessing 的封裝??此脑创a可以知道,所以最底層并沒有異步。ThreadPoolExecutor 自己提供了任務隊列,不需要自己寫了。而所謂的線程池,它只是簡單的比較當前的 threads 數量和定義的 max_workers 的大小,小于 max_workers 就允許任務創建線程執行任務。

操作多線程/多進程1、創建線程池

通過 ThreadPoolExecutor 類創建線程池對象,max_workers 設置最大運行線程數數。使用 ThreadPoolExecutor 的好處是不用擔心線程死鎖問題,讓多線程編程更簡潔。

from concurrent import futurespool = futures.ThreadPoolExecutor(max_workers = 2)2、submit

submit(self, fn, *args, **kwargs):

fn:需要異步執行的函數 *args,**kwargs:fn 接受的參數

該方法的作用就是提交一個可執行的回調task,它返回一個Future對象??梢钥闯龃朔椒ú粫枞骶€程的執行。

import requests,datetime,timefrom concurrent import futuresdef get_request(url): r = requests.get(url) print(’{}:{} {}’.format(datetime.datetime.now(),url,r.status_code))urls = [’https://www.baidu.com’,’https://www.tmall.com’,’https://www.jd.com’]pool = futures.ThreadPoolExecutor(max_workers = 2)for url in urls: task = pool.submit(get_request,url)print(’{}主線程’.format(datetime.datetime.now()))time.sleep(2)# 輸出結果2021-03-12 15:29:10.780141:主線程2021-03-12 15:29:10.865425:https://www.baidu.com 2002021-03-12 15:29:10.923062:https://www.tmall.com 2002021-03-12 15:29:10.940930:https://www.jd.com 2003、map

map(self, fn, *iterables, timeout=None, chunksize=1):

fn:需要異步執行的函數 *iterables:可迭代對象

map 第二個參數是可迭代對象,比如 list、tuple 等,寫法相對簡單。map 方法也不會阻塞主線程的執行。

import requests,datetime,timefrom concurrent import futuresdef get_request(url): r = requests.get(url) print(’{}:{} {}’.format(datetime.datetime.now(),url,r.status_code))urls = [’https://www.baidu.com’,’https://www.tmall.com’,’https://www.jd.com’]pool = futures.ThreadPoolExecutor(max_workers = 2)tasks = pool.map(get_request,urls)print(’{}:主線程’.format(datetime.datetime.now()))time.sleep(2)# 輸出結果2021-03-12 16:14:04.854452:主線程2021-03-12 16:14:04.938870:https://www.baidu.com 2002021-03-12 16:14:05.033849:https://www.jd.com 2002021-03-12 16:14:05.048952:https://www.tmall.com 2004、wait

如果要等待子線程執行完之后再執行主線程要怎么辦呢,可以通過 wait 。

wait(fs, timeout=None, return_when=ALL_COMPLETED):

fs:所有任務 tasks return_when:有三個參數 FIRST_COMPLETED:只要有一個子線程完成則返回結果。 FIRST_EXCEPTION:只要有一個子線程拋異常則返回結果,若沒有異常則等同于ALL_COMPLETED。 ALL_COMPLETED:默認參數,等待所有子線程完成。

import requests,datetime,timefrom concurrent import futuresdef get_request(url): r = requests.get(url) print(’{}:{} {}’.format(datetime.datetime.now(),url,r.status_code))urls = [’https://www.baidu.com’,’https://www.tmall.com’,’https://www.jd.com’]pool = futures.ThreadPoolExecutor(max_workers = 2)tasks =[]for url in urls: task = pool.submit(get_request,url) tasks.append(task)futures.wait(tasks)print(’{}:主線程’.format(datetime.datetime.now()))time.sleep(2)# 輸出結果2021-03-12 16:30:13.437042:https://www.baidu.com 2002021-03-12 16:30:13.552700:https://www.jd.com 2002021-03-12 16:30:14.117325:https://www.tmall.com 2002021-03-12 16:30:14.118284:主線程5、異常處理

as_completed(fs, timeout=None)

所有任務 tasks

使用 concurrent.futures 操作 多線程/多進程 過程中,很多函數報錯并不會直接終止程序,而是什么都沒發生。使用 as_completed 可以捕獲異常,代碼如下

import requests,datetime,timefrom concurrent import futuresdef get_request(url): r = requests.get(url) print(’{}:{} {}’.format(datetime.datetime.now(),url,r.status_code))urls = [’www.baidu.com’,’https://www.tmall.com’,’https://www.jd.com’]# 創建線程池pool = futures.ThreadPoolExecutor(max_workers = 2)tasks =[]for url in urls: task = pool.submit(get_request,url) tasks.append(task)# 異常捕獲 errors = futures.as_completed(tasks)for error in errors: # error.result() 等待子線程都完成,并拋出異常,中斷主線程 # 捕獲子線程異常,不會終止主線程繼續運行 print(error.exception())futures.wait(tasks)print(’{}:主線程’.format(datetime.datetime.now()))time.sleep(2)# 輸出結果Invalid URL ’www.baidu.com’: No schema supplied. Perhaps you meant http://www.baidu.com?2021-03-12 17:24:26.984933:https://www.tmall.com 200None2021-03-12 17:24:26.993939:https://www.jd.com 200None2021-03-12 17:24:26.994937:主線程

多進程編程也類似,將 ThreadPoolExecutor 替換成 ProcessPoolExecutor 。

以上就是python基于concurrent模塊實現多線程的詳細內容,更多關于python concurrent實現多線程的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
奇米色欧美一区二区三区| 美女视频网站久久| 国产一级成人av| 视频一区欧美精品| 快she精品国产999| 国产女优一区| 首页国产欧美久久| 模特精品在线| 亚洲欧洲一区| 亚洲一区二区三区免费在线观看| 欧美日韩国产高清电影| 欧美日中文字幕| 亚洲福利一区| 国产一区导航| 中文字幕视频精品一区二区三区 | 亚洲精品日本| 日韩精品一二区| 亚洲精品国产精品粉嫩| 日韩精品久久久久久| 欧美精品三级在线| 精品色999| 99久久久久久中文字幕一区| 国产高清一区二区| 免费看欧美美女黄的网站| 亚洲最新av| 欧美亚洲网站| 欧美激情一区| 日韩欧美中文| 99国产精品| 91欧美日韩在线| 久久尤物视频| 91视频精品| 亚洲免费黄色| 毛片在线网站| 日韩国产欧美| 99热精品在线| 精品国产不卡一区二区| 亚洲自啪免费| 999久久久精品国产| 奇米亚洲欧美| 欧美日韩一区二区三区不卡视频| 麻豆久久久久久| 中文在线а√天堂| 性欧美69xoxoxoxo| 日韩国产欧美三级| 久久亚洲黄色| 成人污污视频| 在线一区免费观看| 国产一级成人av| 四虎4545www国产精品| 先锋影音国产一区| 麻豆精品新av中文字幕| 999久久久91| 日韩精品免费视频人成| 国产成人在线中文字幕| 国产亚洲高清视频| 久久精品99久久久| 欧美日韩国产v| 亚洲精品护士| 日韩成人精品一区| 久久成人精品| 国产精品九九| 激情婷婷综合| 国产日韩高清一区二区三区在线 | 亚洲大片在线| 88久久精品| 久久中文字幕二区| 91久久精品无嫩草影院| 国产精品精品| 日韩一区精品字幕| 国产成人在线中文字幕| 亚洲人成亚洲精品| 国产videos久久| 日韩视频在线一区二区三区| 美女av一区| 少妇精品久久久一区二区| 久久久蜜桃一区二区人| 国产日韩一区二区三免费高清| 激情丁香综合| 久久精品国产在热久久| 视频一区二区欧美| 久久国产中文字幕| 久久精品国产免费| 日韩高清在线不卡| 午夜在线一区二区| 婷婷国产精品| 精品国产乱码久久久久久樱花| 婷婷综合网站| 成午夜精品一区二区三区软件| 亚洲精品高潮| 香蕉成人久久| 午夜国产一区二区| 黄色在线观看www| 欧美视频一区| 日韩中文字幕亚洲一区二区va在线 | 性色一区二区| 99精品美女| 麻豆视频在线看| 91免费精品国偷自产在线在线| 夜久久久久久| 日韩国产一区二区| 精品中文字幕一区二区三区 | 欧美日韩国产一区二区三区不卡| 麻豆免费精品视频| 日韩国产欧美三级| 亚洲日本在线观看视频| 亚洲精品a级片| 三上悠亚国产精品一区二区三区| 国产精品18| 91麻豆精品激情在线观看最新 | 欧美亚洲国产激情| 欧美成人a交片免费看| 日本午夜精品| 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产婷婷精品| 日本午夜大片a在线观看| 国产精品黄色片| 日韩黄色免费网站| 天堂av一区| 亚洲理论在线| 久久亚洲风情| 免费看日韩精品| 亚洲欧美日韩在线观看a三区 | 美女久久网站| 日韩中文字幕亚洲一区二区va在线| 在线日韩欧美| 偷拍欧美精品| 婷婷综合激情| 99国产成+人+综合+亚洲欧美| 宅男噜噜噜66国产日韩在线观看| japanese国产精品| 日韩视频在线一区二区三区 | 亚洲激情中文在线| 亚洲激情中文| 中文视频一区| 视频在线观看国产精品| 免费观看在线综合| 天堂久久av| 国产日韩视频| 国产高清亚洲| 美腿丝袜亚洲三区| 日产精品一区二区| 久久天堂av| 性欧美videohd高精| 欧美不卡高清一区二区三区| 中文字幕高清在线播放| 三级精品视频| 亚洲黄页一区| 亚洲tv在线| 蜜桃精品视频| 国产伊人久久| 日本精品影院| 午夜国产欧美理论在线播放| 午夜在线精品偷拍| 日韩超碰人人爽人人做人人添| 国产亚洲久久| 国产精品二区不卡| 香蕉人人精品| 色8久久久久| 国产精品毛片久久久| 国产精品一站二站| 成人国产精选| 香蕉精品视频在线观看| 亚洲精品女人| 久久不见久久见中文字幕免费| 国产一区二区三区探花| 欧美成人基地 | 高清在线一区| 欧美在线亚洲| 欧美成人综合| 日韩激情一区二区| 精品久久中文| 99在线精品免费视频九九视| 中文字幕日韩高清在线| 国产精品一卡| 日产精品一区| 免费黄网站欧美| 久久精品伊人| 亚洲高清av| 国产精品亚洲片在线播放| 国产精品久久久久久久久久10秀| 日韩综合一区| 久久国产精品久久w女人spa| 日韩精品三级| 欧美aa在线观看| 天堂va欧美ⅴa亚洲va一国产| 亚洲国产欧美日本视频| 亚洲在线电影| 久久久久久色| 欧美日韩免费看片| 亚洲天堂av资源在线观看| 精品99在线| 日韩影院在线观看| 国产日韩电影| 首页欧美精品中文字幕| 福利视频一区| 日韩中文字幕不卡| 丝袜诱惑一区二区| 日韩高清在线不卡| 日韩亚洲一区在线|