- 可以監(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()
python進(jìn)階 IO多路復(fù)用
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門夫嗓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人提揍,你說(shuō)我怎么就攤上這事啤月。” “怎么了劳跃?”我有些...
- 文/不壞的土叔 我叫張陵谎仲,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我刨仑,道長(zhǎng)郑诺,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任杉武,我火速辦了婚禮辙诞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘轻抱。我一直安慰自己飞涂,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著较店,像睡著了一般士八。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上梁呈,一...
- 那天婚度,我揣著相機(jī)與錄音,去河邊找鬼官卡。 笑死蝗茁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的寻咒。 我是一名探鬼主播哮翘,決...
- 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼仔涩!你這毒婦竟也來(lái)了忍坷?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤熔脂,失蹤者是張志新(化名)和其女友劉穎佩研,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霞揉,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡旬薯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了适秩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绊序。...
- 正文 年R本政府宣布阶捆,位于F島的核電站,受9級(jí)特大地震影響钦听,放射性物質(zhì)發(fā)生泄漏洒试。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一朴上、第九天 我趴在偏房一處隱蔽的房頂上張望垒棋。 院中可真熱鬧,春花似錦痪宰、人聲如沸叼架。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)碉碉。三九已至柴钻,卻和暖如春淮韭,著一層夾襖步出監(jiān)牢的瞬間垢粮,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓占键,卻偏偏與公主長(zhǎng)得像昔善,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子畔乙,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 網(wǎng)絡(luò)編程 一.楔子 你現(xiàn)在已經(jīng)學(xué)會(huì)了寫python代碼牲距,假如你寫了兩個(gè)python文件a.py和b.py返咱,分別去運(yùn)...
- Socket:(基于TCP、IP協(xié)議的網(wǎng)絡(luò)通信)套接字 基于Socket實(shí)現(xiàn)聊天機(jī)器人# 客戶端import so...
- 1.以《三言兩拍》中“二拍”的第一篇為標(biāo)尺牍鞠,確定出自己的閱讀層次咖摹,并據(jù)此制定一個(gè)閱讀套餐。(文言幾成+舊小說(shuō)幾成+...
- 電影《一個(gè)陌生女人的來(lái)信》里有這樣一段話:在這個(gè)世界上难述,再也沒有比置身于人群之中萤晴,卻又得孤獨(dú)生活更可怕的事了。初看...
- LeetCode 187 Repeated DNA Sequences All DNA is composed o...