欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

python分布式進(jìn)程爬蟲怎樣模擬

小編給大家分享一下python分布式進(jìn)程爬蟲怎樣模擬,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

成都創(chuàng)新互聯(lián)秉承實(shí)現(xiàn)全網(wǎng)價(jià)值營(yíng)銷的理念,以專業(yè)定制企業(yè)官網(wǎng),網(wǎng)站建設(shè)、網(wǎng)站制作,小程序定制開發(fā),網(wǎng)頁(yè)設(shè)計(jì)制作,移動(dòng)網(wǎng)站建設(shè),全網(wǎng)營(yíng)銷推廣幫助傳統(tǒng)企業(yè)實(shí)現(xiàn)“互聯(lián)網(wǎng)+”轉(zhuǎn)型升級(jí)專業(yè)定制企業(yè)官網(wǎng),公司注重人才、技術(shù)和管理,匯聚了一批優(yōu)秀的互聯(lián)網(wǎng)技術(shù)人才,對(duì)客戶都以感恩的心態(tài)奉獻(xiàn)自己的專業(yè)和所長(zhǎng)。

比如我們需要抓取某個(gè)圖片網(wǎng)站的所有圖片,如果用我們的分布式進(jìn)程的思想,我們會(huì)創(chuàng)建一個(gè)進(jìn)程負(fù)責(zé)抓取圖片的鏈接地址,然后將這些鏈接地址存放到Queue中,另外的進(jìn)程負(fù)責(zé)從Queue中讀取鏈接進(jìn)行圖片的下載或者進(jìn)行其他操作(存在本地)

其實(shí)我們的Queue是暴露在網(wǎng)絡(luò)中的,通過(guò)分布式就是將其進(jìn)行了封裝,其實(shí)也就是所謂的本地隊(duì)列的網(wǎng)絡(luò)化。

接下來(lái),我們來(lái)分析一下如何去創(chuàng)建一個(gè)分布式的服務(wù)進(jìn)程,總體可以分為六步:

1、首先我們需要建立一個(gè)隊(duì)列queue,這個(gè)主要用作進(jìn)程之間的通信??傮w來(lái)說(shuō)就是兩種進(jìn)程,一種是服務(wù)進(jìn)程,一種是任務(wù)進(jìn)程。服務(wù)進(jìn)程創(chuàng)建任務(wù)隊(duì)列task_queue,用作傳遞任務(wù)給任務(wù)進(jìn)程的通道。服務(wù)進(jìn)程又創(chuàng)建result_queue,作為任務(wù)進(jìn)程完成任務(wù)后回復(fù)服務(wù)進(jìn)程的通道。在分布式進(jìn)程的環(huán)境下,我們需要通過(guò)Queuemanager 獲得的Queue接口來(lái)添加任務(wù)。

2、把我們?cè)诘谝徊街嘘?duì)列在網(wǎng)絡(luò)上進(jìn)行注冊(cè),暴露給其他的進(jìn)程或者主機(jī),注冊(cè)后獲得網(wǎng)絡(luò)隊(duì)列,相當(dāng)于本地隊(duì)列的映像。

3、建立Queuemanager的對(duì)象,并且實(shí)例化,綁定端口和口令

4、啟動(dòng)第三步中建立的實(shí)例,即啟動(dòng)管理manager,監(jiān)管信息通道

5、通過(guò)管理實(shí)例的方法獲取到通過(guò)網(wǎng)絡(luò)訪問的queue對(duì)象,也就是把網(wǎng)絡(luò)對(duì)象實(shí)體化成本地的一個(gè)隊(duì)列。

6、創(chuàng)建任務(wù)到“本地”隊(duì)列中,自動(dòng)上傳任務(wù)到網(wǎng)絡(luò)隊(duì)列中,分配給任務(wù)進(jìn)程進(jìn)行處理。

我們來(lái)寫一下服務(wù)進(jìn)程的代碼 taskManager.py:

import queue
from multiprocessing.managers import BaseManager
from multiprocessing import freeze_support
# 任務(wù)個(gè)數(shù)
task_num = 500
# 定義收發(fā)隊(duì)列
task_queue = queue.Queue(task_num)
result_queue = queue.Queue(task_num)
def get_task():
    return task_queue
def get_result():
    return result_queue
# 創(chuàng)建類似的QueueManager
class QueueManager(BaseManager):
    pass
def run():
    # Windows下綁定調(diào)用接口不能使用lambda,所以只能先定義函數(shù)再綁定
    QueueManager.register('get_task_queue', callable = get_task)
    QueueManager.register('get_result_queue', callable=get_result)
    #綁定端口并設(shè)置驗(yàn)證口令,windows下需要填寫ip地址,Linux中不填默認(rèn)為本地
    manager = QueueManager(address=('127.0.0.1', 8001), authkey='jap'.encode('utf-8'))
    # 啟動(dòng)
    manager.start()
    try:
        # 通過(guò)網(wǎng)絡(luò)獲取任務(wù)隊(duì)列和結(jié)果隊(duì)列
        task = manager.get_task_queue()
        result = manager.get_result_queue()
        # 添加任務(wù)
        for url in ["JAP君url:"+str(i) for i in range(500)]:
            print("添加任務(wù) %s" %url)
            task.put(url)
        print("正在獲取結(jié)果...")
        for i in range(500):
            print("result is %s" %result.get(timeout=10))
    except:
        print('Manager error')
    finally:
        # 一定要關(guān)閉,否則會(huì)報(bào)管道未關(guān)閉的錯(cuò)
        manager.shutdown()
if __name__ == '__main__':
    # windows下多進(jìn)程可能會(huì)出現(xiàn)問題,添加這句話可以解決
    freeze_support()
    run()

看完了這篇文章,相信你對(duì)python分布式進(jìn)程爬蟲怎樣模擬有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

文章題目:python分布式進(jìn)程爬蟲怎樣模擬
網(wǎng)頁(yè)路徑:http://chinadenli.net/article34/gjcdse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、虛擬主機(jī)、網(wǎng)站維護(hù)、用戶體驗(yàn)、自適應(yīng)網(wǎng)站、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)