python每日一題:分佈式進程之坑點

1.看{python爬蟲開發與項目實戰}中關於分佈式進程的介紹,一直卡在這個知識點,書中的這個例子描述是在不一樣電腦上進行運行的,但這裏有一個前提:兩臺電腦的網段需相同,因此,編程練習時,對着兩臺電腦一直找問題,始終沒解決。python

2.書中關於ip地址是127.0.0.1,這個地址是迴環地址,在同一臺機器上,開兩個cmd 或者pycharm輸入書中的程序能夠進行數據傳輸,另外也能夠改爲本身電腦的ip(個人192.168.103.130),在同一臺電腦上運行編程

3.本身思考了一段時間,書中的例子實際上是爲了採用網絡隊列進行不一樣電腦的數據交互,但不一樣的電腦網段需相同。我這裏不知足要求,索性用了一臺電腦進行數據交互,開兩個程序,至關於開了兩個進程,也屬於分佈式進程,但比較特殊罷了服務器

題目:採用分佈式進程,一臺電腦a進行傳輸一系列的網址,另外一臺電腦b分別打開網址,並返回相應的網址字節數。網絡

服務器端:app

from multiprocessing.managers import BaseManager
from multiprocessing import freeze_support
import  queue
task_number=3
task_queue = queue.Queue()
result_queue = queue.Queue()
list1=['http://baidu.com','http://xiaomi.com','http://huawei.com']
def get_task():
    global task_queue
    return task_queue
def get_result():
    global result_queue
    return result_queue
class QueueManager(BaseManager):
    pass
def win_run():
    QueueManager.register('get_task_queue', callable=get_task)
    QueueManager.register('get_result_queue', callable=get_result)
    manager =QueueManager(address=('192.168.103.130', 20001), authkey=b'qiye')
    manager.start()
    try:
        task = manager.get_task_queue()
        result = manager.get_result_queue()
        for i in list1:
            print('transparenting url:', i)
            task.put(i)
        print('try to get the details of url')
        print('the url details is as follows:')
        for i in range(len(list1)):
            print(list1[i],":", result.get(True, timeout=20))
    except:
        print('manger is error')
    finally:
        manager.shutdown()
if __name__ == "__main__":
    freeze_support()
    win_run()

客戶端:python爬蟲

from multiprocessing.managers import BaseManager
import  queue,time,urllib.request
class QueueManager(BaseManager):
    pass
if __name__ == "__main__":
    list1=[]
    list2=[]
    QueueManager.register('get_task_queue')
    QueueManager.register('get_result_queue')
    m =QueueManager(address=('192.168.103.130', 20001), authkey=b'qiye')
    m.connect()
    task=m.get_task_queue()
    result=m.get_result_queue()
    while(not task.empty()):
        imageurl=task.get(True,timeout=20)
        list1.append(imageurl)
        print('opening ',imageurl)
        a=urllib.request.urlopen(imageurl)
        data=a.read()
        b=len(data)
        print( imageurl,'the url data is',b)
        list2.append(b)
        result.put(b)
    print('game over')

調試結果:本程序是在同一臺電腦打開兩個程序運行的分佈式

服務器端:url

transparenting url: http://baidu.com
transparenting url: http://xiaomi.com
transparenting url: http://huawei.com
try to get the details of url
the url details is as follows:
http://baidu.com : 81
http://xiaomi.com : 324657
http://huawei.com : 128494

客戶端:spa

opening  http://baidu.com
http://baidu.com the url data is 81
opening  http://xiaomi.com
http://xiaomi.com the url data is 324657
opening  http://huawei.com
http://huawei.com the url data is 128494
game over
相關文章
相關標籤/搜索