這篇文章主要介紹了python已協程方式處理任務實現過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
#從genent中導入monky模塊① from gevent import monkey #把程序變成協程的方式運行② monkey.patch_all() import gevent,requests,time #導入requests和time start = time.time() #記錄程序開始時間 url_list = ['https://www.baidu.com/', 'https://www.sina.com.cn/', 'http://www.sohu.com/', 'https://www.qq.com/', 'https://www.163.com/', 'http://www.iqiyi.com/', 'https://www.tmall.com/', 'http://www.ifeng.com/'] #把8個網站封裝成列表 def get_data(url): r = requests.get(url) # 用requests.get()函數爬取網站 print(url, time.time()-start,r.status_code) task_list=[] # 創建一個空列表 for url in url_list: # 用gevent里面的spawn函數創建任務 get_data是方法名,url是參數③ task=gevent.spawn(get_data,url) # 將創建的任務添加到task_list④ task_list.append(task) #執行任務列表中的所有任務⑤ gevent.joinall(task_list) end = time.time() #記錄程序結束時間 print(end-start) #end-start是結束時間減去開始時間,就是最終所花時間。
使用隊列,代碼如下:
#從genent中導入monky模塊① from gevent import monkey #把程序變成協程的方式運行② monkey.patch_all() import gevent,requests,time #從gevent庫里導入queue模塊 from gevent.queue import Queue #導入requests和time start = time.time() #記錄程序開始時間 url_list = ['https://www.baidu.com/', 'https://www.sina.com.cn/', 'http://www.sohu.com/', 'https://www.qq.com/', 'https://www.163.com/', 'http://www.iqiyi.com/', 'https://www.tmall.com/', 'http://www.ifeng.com/'] #把8個網站封裝成列表 #創建隊列對象,并賦值給work。 work=Queue() for url in url_list: # 用put_nowait()函數可以把網址都放進隊列里。 work.put_nowait(url) def get_data(): # 當隊列不是空的時候,就執行下面的程序。 while not work.empty(): # 用get_nowait()函數可以把隊列里的網址都取出。 url=work.get_nowait() r = requests.get(url) # 用requests.get()函數爬取網站 qsize隊列長度 print(url, work.qsize(),r.status_code) task_list=[] # 創建一個空列表 # 創建了2個爬蟲 for x in range(2): # 用gevent里面的spawn函數創建任務 get_data是方法名 task=gevent.spawn(get_data) # 將創建的任務添加到task_list④ task_list.append(task) #執行任務列表中的所有任務⑤ gevent.joinall(task_list) end = time.time() #記錄程序結束時間 print(end-start) #end-start是結束時間減去開始時間,就是最終所花時間。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。