真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python分布式進(jìn)程爬蟲怎樣模擬-創(chuàng)新互聯(lián)

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

站在用戶的角度思考問題,與客戶深入溝通,找到湯原網(wǎng)站設(shè)計(jì)與湯原網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋湯原地區(qū)。

比如我們需要抓取某個(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ò)中的,通過分布式就是將其進(jìn)行了封裝,其實(shí)也就是所謂的本地隊(duì)列的網(wǎng)絡(luò)化。

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

1、首先我們需要建立一個(gè)隊(duì)列queue,這個(gè)主要用作進(jìn)程之間的通信??傮w來說就是兩種進(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)境下,我們需要通過Queuemanager 獲得的Queue接口來添加任務(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、通過管理實(shí)例的方法獲取到通過網(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)行處理。

我們來寫一下服務(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:
        # 通過網(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è)資訊頻道,感謝各位的閱讀!


網(wǎng)站名稱:python分布式進(jìn)程爬蟲怎樣模擬-創(chuàng)新互聯(lián)
URL標(biāo)題:http://weahome.cn/article/dppgjg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部