python進(jìn)階 IO多路復(fù)用

  • 可以監(jiān)聽多個(gè)文件描述符(socket對(duì)象)(文件句柄),一旦文件句柄出現(xiàn)變化鸡号,即可感知
    # 服務(wù)端
    import socket
    
    sk1 = socket.socket()
    sk1.bind(('127.0.0.1', 8001, ))
    sk1.listen()
    
    sk2 = socket.socket()
    sk2.bind(('127.0.0.1', 8002, ))
    sk2.listen()
    
    sk3 = socket.socket()
    sk3.bind(('127.0.0.1', 8003, ))
    sk3.listen()
    
    inputs = [sk1, sk2, sk3, ]
    import select
    while True:
        # r_list ->inputs 監(jiān)聽變化, w_list -> [sk1, sk2] 有什么就放如什么
        # e_list -> [] 對(duì)相應(yīng)錯(cuò)誤,1:等待的時(shí)間
        r_list, w_list, e_list = select.select(inputs, [sk1, sk2], inputs, 1)
        for sk in r_List:
            # print(sk)
            # 每一個(gè)連接對(duì)象
            conn, address = sk.accept()
            conn.sendall(bytes('hello', encoding='utf-8'))
            # conn.close()
        for sk in e_list:
            # 哪一個(gè)連接出錯(cuò)就移除它
            inputs.remove(sk)
    # ---------------------------------------------------------------------------
    # 客戶端1
    import socket
    
    obj = socket.socket()
    obj.connect(('127.0.0.1', 8001))
    
    content = str(obj.recv(1024), encoding='utf-8')
    print(content)
    obj.close()
    # --------------------------------------------------------------------------
    # 客戶端2
    import socket
    
    obj = socket.socket()
    obj.connect(('127.0.0.1', 8002))
    
    content = str(obj.recv(1024), encoding='utf-8')
    print(content)
    obj.close()
    
  • 基于IO多路復(fù)用select+socket實(shí)現(xiàn)偽并發(fā)
    # 服務(wù)端
    import socket
    
     sk1 = socket.socket()
     sk1.bind(('127.0.0.1', 8001, ))
     sk1.listen()
    
     inputs = [sk1,  ]
     outputs = []
     message_dict = {}
    
     import select
     while True:
         r_list, w_list, e_list = select.select(inputs, outputs, inputs, 1)
         print('正在監(jiān)聽的socket對(duì)象有%d個(gè)', len(inputs))
         print(r_list)
         for sk1_or_conn in r_List:
             # 每一個(gè)連接對(duì)象
             if sk1_or_conn == sk1:
                 # 表示有新用戶來(lái)連接
                 conn, address = sk1_or_conn.accept()
                 inputs.append(conn)
                 message_dict[conn] = []
             else:
                 # 有老用戶發(fā)消息了
                 try:
                     data_bytes = sk1_or_conn.recv(1024)
                 except Exception as e:
                     inputs.remove(sk1_or_conn)
                 else:
                      data_str = str(data_bytes, encoding='utf-8')
                      message_dict[sk1_or_conn].append(data_str)
          # w_list僅僅保存了誰(shuí)給我發(fā)過(guò)消息
          for conn in w_list:
              recv_str = message_dict[conn][0]
              del message_dict[conn][0]
              conn.sendall(bytes(recv_str + '好', encoding='utf-8'))
              outputs.remove(conn)
          for sk in e_list:
              inputs.remove(sk)
     # -------------------------------------------------------------------------
     # 客戶端
     import socket
    
     obj = socket.socket()
     obj.connect(('127.0.0.1', 8001))
    
     while True:
         inp = input('>>>>')
         obj.sendall(bytes(inp, encoding='utf-8'))
         ret = str(obj.recv(1024), encoding='utf-8')
         print(ret)
    
    obj.close()
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末睦番,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子耍属,更是在濱河造成了極大的恐慌托嚣,老刑警劉巖召烂,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屎勘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蒋失,警方通過(guò)查閱死者的電腦和手機(jī)领舰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門夫嗓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人提揍,你說(shuō)我怎么就攤上這事啤月。” “怎么了劳跃?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵谎仲,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我刨仑,道長(zhǎng)郑诺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任杉武,我火速辦了婚禮辙诞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘轻抱。我一直安慰自己飞涂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著较店,像睡著了一般士八。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上梁呈,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天婚度,我揣著相機(jī)與錄音,去河邊找鬼官卡。 笑死蝗茁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的寻咒。 我是一名探鬼主播哮翘,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼仔涩!你這毒婦竟也來(lái)了忍坷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤熔脂,失蹤者是張志新(化名)和其女友劉穎佩研,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霞揉,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旬薯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了适秩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绊序。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖秽荞,靈堂內(nèi)的尸體忽然破棺而出骤公,到底是詐尸還是另有隱情,我是刑警寧澤扬跋,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布阶捆,位于F島的核電站,受9級(jí)特大地震影響钦听,放射性物質(zhì)發(fā)生泄漏洒试。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一朴上、第九天 我趴在偏房一處隱蔽的房頂上張望垒棋。 院中可真熱鬧,春花似錦痪宰、人聲如沸叼架。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)碉碉。三九已至柴钻,卻和暖如春淮韭,著一層夾襖步出監(jiān)牢的瞬間垢粮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工靠粪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜡吧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓占键,卻偏偏與公主長(zhǎng)得像昔善,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子畔乙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

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

  • 網(wǎng)絡(luò)編程 一.楔子 你現(xiàn)在已經(jīng)學(xué)會(huì)了寫python代碼牲距,假如你寫了兩個(gè)python文件a.py和b.py返咱,分別去運(yùn)...
    go以恒閱讀 2,016評(píng)論 0 6
  • Socket:(基于TCP、IP協(xié)議的網(wǎng)絡(luò)通信)套接字 基于Socket實(shí)現(xiàn)聊天機(jī)器人# 客戶端import so...
    xinmin閱讀 796評(píng)論 0 0
  • 1.以《三言兩拍》中“二拍”的第一篇為標(biāo)尺牍鞠,確定出自己的閱讀層次咖摹,并據(jù)此制定一個(gè)閱讀套餐。(文言幾成+舊小說(shuō)幾成+...
    身無(wú)彩鳳心有靈犀閱讀 206評(píng)論 2 0
  • 電影《一個(gè)陌生女人的來(lái)信》里有這樣一段話:在這個(gè)世界上难述,再也沒有比置身于人群之中萤晴,卻又得孤獨(dú)生活更可怕的事了。初看...
    青爭(zhēng)女俠閱讀 193評(píng)論 0 1
  • LeetCode 187 Repeated DNA Sequences All DNA is composed o...
    ShuiLocked閱讀 1,858評(píng)論 0 1