給大家分享一篇 分布式計算--(分布式+多進(jìn)程+多線程+多協(xié)程)

先來個最簡單的例子:

把1-10000每個數(shù)求平方

服務(wù)器server:

用兩個隊(duì)列存儲任務(wù)铺然、結(jié)果

定義兩個函數(shù)

要實(shí)現(xiàn)分布式得繼承multiprocessing.managers.BaseManager

在主函數(shù)里multiprocessing.freeze_support()開啟分布式支持

注冊兩個函數(shù)給客戶端調(diào)用

創(chuàng)建管理器灰瞻,設(shè)置ip地址和開啟端口做粤、鏈接密碼砖顷。

用兩個隊(duì)列加任務(wù)喷众、收結(jié)果浓恶。用剛剛注冊的函數(shù)

把1-10000壓入隊(duì)列,

把結(jié)果壓入隊(duì)列

最后完成關(guān)閉服務(wù)器

客戶端client:

也需要繼承multiprocessing.managers.BaseManager

定義一個協(xié)程處理一個數(shù)據(jù)岭参,同時把結(jié)果壓入結(jié)果隊(duì)列

定義一個線程處理10個數(shù)據(jù)反惕,開啟10個協(xié)程

定義一個進(jìn)程,進(jìn)程驅(qū)動10個線程

主函數(shù):同客戶端注冊兩個函數(shù)

同客戶端創(chuàng)建管理器演侯,設(shè)置ip地址和開啟端口姿染、鏈接密碼。

鏈接服務(wù)器

同客戶端調(diào)用注冊的函數(shù)秒际,兩個隊(duì)列

套四層循環(huán):10個進(jìn)程悬赏、100個線程、1000個協(xié)程

循環(huán)進(jìn)程函數(shù)

上代碼:

服務(wù)器server:

#coding:utf-8
import multiprocessing  #分布式進(jìn)程
import multiprocessing.managers #分布式進(jìn)程管理器
import random,time  #隨機(jī)數(shù)娄徊,時間
import Queue #隊(duì)列

task_queue=Queue.Queue() #任務(wù)
result_queue=Queue.Queue() #結(jié)果

def  return_task(): #返回任務(wù)隊(duì)列
    return task_queue
def return_result(): #返回結(jié)果隊(duì)列
    return   result_queue

class  QueueManger(multiprocessing.managers.BaseManager):#繼承闽颇,進(jìn)程管理共享數(shù)據(jù)
    pass

if __name__=="__main__":
    multiprocessing.freeze_support()#開啟分布式支持
    QueueManger.register("get_task",callable=return_task)#注冊函數(shù)給客戶端調(diào)用
    QueueManger.register("get_result", callable=return_result)
    manger=QueueManger(address=("192.168.112.11",8848),authkey="123456") #創(chuàng)建一個管理器,設(shè)置地址與密碼
    manger.start() #開啟
    task,result=manger.get_task(),manger.get_result() #任務(wù)寄锐,結(jié)果
    for  i  in range(10000):
        print "task add data",i
        task.put(i)
    print "waitting for------"
    for  i  in range(10000):
        res=result.get(timeout=100)
        print "get data",res

    manger.shutdown()#關(guān)閉服務(wù)器

客戶端client:

#coding:utf-8
import multiprocessing  #分布式進(jìn)程
import multiprocessing.managers  # 分布式進(jìn)程管理器
import random,time  #隨機(jī)數(shù)兵多,時間
import Queue #隊(duì)列
import threading
import gevent
import gevent.monkey


class  QueueManger(multiprocessing.managers.BaseManager):# 繼承,進(jìn)程管理共享數(shù)據(jù)
    pass
def  gevetygo(num ,result): #協(xié)程處理一個數(shù)據(jù)
    print num*num
    result.put(num*num)

def  threadgo(datalist,result): # 線程處理10個數(shù)據(jù)橄仆,開啟10個協(xié)程
    tasklist=[]
    for  data  in datalist:
        tasklist.append(gevent.spawn(gevetygo, data,result))
    gevent.joinall(tasklist)

def  processgo(ddatalist,result): # [[1,2,3],[4,5,6]] 進(jìn)程驅(qū)動了10個線程
    threadlist=[]
    for  datalist in ddatalist:
        mythread=threading.Thread(target=threadgo,args=(datalist,result))
        mythread.start()
        threadlist.append(mythread)
    for mythread in threadlist:
        mythread.join()

if __name__=="__main__":
    QueueManger.register("get_task")  # 注冊函數(shù)調(diào)用服務(wù)器
    QueueManger.register("get_result")
    manger=QueueManger(address=("192.168.112.11",8848),authkey="123456")
    manger.connect()  # 鏈接服務(wù)器
    task= manger.get_task()
    result =manger.get_result()  # 任務(wù)剩膘,結(jié)果

    # 1000
    # 10個進(jìn)程
    # 100個線程
    # 1000個協(xié)程

    for  i  in range(10):
        cubelist = []  # [[[1],[2]]]
        for j in range(10):
            arealist = []
            for k in range(10):
                linelist = []
                for l in range(10):
                    data = task.get()
                    linelist.append(data)
                arealist.append(linelist)
            cubelist.append(arealist)

        processlist = []
        for myarealist in cubelist:
            process = multiprocessing.Process(target=processgo, args=(myarealist, result))
            process.start()
            processlist.append(process)
        for process in processlist:
            process.join()

遇到的坑:一個月之前弄分布式的時候?qū)慽p地址怎么都開啟不了,后來換了臺電腦就支持了= =盆顾。

如果只是在自己電腦上弄的話怠褐,寫127.0.0.1也可以運(yùn)行,如果你也遇到ip地址怎么都開啟不了的情況

整理不易您宪,如果覺得有所幫助奈懒,希望可以留下您的精彩言論再走。趕快為你們最喜歡的框架打Call吧宪巨。

大家如果需要Python的學(xué)習(xí)資料可以加我的Qun:834179111磷杏,小編整理了,從Python入門零基礎(chǔ)到項(xiàng)目實(shí)戰(zhàn)的資料揖铜。歡迎還沒有找到方向的小伙伴來學(xué)習(xí)茴丰。
 
本文轉(zhuǎn)自網(wǎng)絡(luò) 如有侵權(quán) 請聯(lián)系小編刪除

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市天吓,隨后出現(xiàn)的幾起案子贿肩,更是在濱河造成了極大的恐慌,老刑警劉巖龄寞,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汰规,死亡現(xiàn)場離奇詭異,居然都是意外死亡物邑,警方通過查閱死者的電腦和手機(jī)溜哮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門滔金,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茂嗓,你說我怎么就攤上這事餐茵。” “怎么了述吸?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵忿族,是天一觀的道長。 經(jīng)常有香客問我蝌矛,道長道批,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任入撒,我火速辦了婚禮隆豹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘茅逮。我一直安慰自己璃赡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布氮唯。 她就那樣靜靜地躺著鉴吹,像睡著了一般姨伟。 火紅的嫁衣襯著肌膚如雪惩琉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天夺荒,我揣著相機(jī)與錄音瞒渠,去河邊找鬼。 笑死技扼,一個胖子當(dāng)著我的面吹牛伍玖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播剿吻,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼窍箍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了丽旅?” 一聲冷哼從身側(cè)響起椰棘,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎榄笙,沒想到半個月后邪狞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茅撞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年帆卓,在試婚紗的時候發(fā)現(xiàn)自己被綠了巨朦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡剑令,死狀恐怖糊啡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吁津,我是刑警寧澤悔橄,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站腺毫,受9級特大地震影響癣疟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜潮酒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一睛挚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧急黎,春花似錦扎狱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至故源,卻和暖如春污抬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绳军。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工印机, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人门驾。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓射赛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奶是。 傳聞我的和親對象是個殘疾皇子楣责,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容