這篇文章主要介紹了python3爬蟲(chóng)中分布式指的是什么,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)公司主要從事網(wǎng)站制作、網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)璧山,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢建站服務(wù):13518219792
服務(wù)進(jìn)程
我們先來(lái)看服務(wù)進(jìn)程,服務(wù)進(jìn)程主要工作:
l 服務(wù)進(jìn)程負(fù)責(zé)啟動(dòng)Queue
l 把Queue注冊(cè)到網(wǎng)絡(luò)上
l 往Queue里面寫(xiě)入任務(wù)
我們用代碼來(lái)看實(shí)際效果:
import queue from multiprocessing.managers import BaseManager # 創(chuàng)建task_queue和result_queue對(duì)了用來(lái)存放任務(wù)和結(jié)果 task_queue = queue.Queue() result_queue = queue.Queue() class QueueManager(BaseManager): """ 繼承BaseManager """ pass # 把創(chuàng)建的兩個(gè)隊(duì)列注冊(cè)到網(wǎng)絡(luò)上,利用register方法,callable參數(shù)關(guān)聯(lián)對(duì)象 # 注意windows下綁定調(diào)用接口不能使用lambda QueueManager.register('get_task_queue', callable=lambda: task_queue) QueueManager.register('get_result_queue', callable=lambda: result_queue) # 綁定5000端口, 設(shè)置密鑰 manager = QueueManager(address=('', 5000), authkey=b'abc') # 啟動(dòng)queue,監(jiān)聽(tīng)通道 manager.start() # 獲得通過(guò)網(wǎng)絡(luò)訪問(wèn)的對(duì)象,注意分布式進(jìn)程必須通過(guò)manager.get_task_queue()獲得的Queue接口添加 task = manager.get_task_queue() result = manager.get_result_queue() # 添加任務(wù) for url in ['url_' + str(i) for i in range(10)]: print('put task %s...' % url) task.put(url) # 獲取返回結(jié)果 for i in range(10): print('result is %s' % result.get(timeout=10)) # 關(guān)閉管理 manager.shutdown() print('master exit')
任務(wù)進(jìn)程
任務(wù)進(jìn)程主要的工作如下:
l 注冊(cè)獲取網(wǎng)絡(luò)上queue
l 連接服務(wù)器
l 從task隊(duì)列獲取任務(wù),并寫(xiě)入結(jié)果
示例代碼如下:
import time from multiprocessing.managers import BaseManager class QueueManager(BaseManager): """ 繼承類(lèi)BaseManager """ pass # 使用register注冊(cè),獲取網(wǎng)絡(luò)queue名稱(chēng) QueueManager.register('get_task_queue') QueueManager.register('get_result_queue') # 配置服務(wù)器ip并連接服務(wù)器 server_addr = '127.0.0.1' print('connect to server %s...' % server_addr) m = QueueManager(address=(server_addr, 5000), authkey=b'abc') # 從網(wǎng)絡(luò)連接 m.connect() # 獲取queue對(duì)象 task = m.get_task_queue() result = m.get_result_queue() # 從task獲取任務(wù)并將結(jié)果寫(xiě)入result while(not task.empty()): image_url = task.get(True, timeout=5) print('run task download %s...' % image_url) time.sleep(1) result.put('%s ------>success' % image_url) print('worker exit')
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享python3爬蟲(chóng)中分布式指的是什么內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,遇到問(wèn)題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來(lái)學(xué)習(xí)!