您好,登錄后才能下訂單哦!
先看服務端的代碼
import sys # import socket import time import gevent from gevent import socket from gevent import monkey monkey.patch_all() #類似于python中的黑魔法,把很多模塊的阻塞的變成非阻塞的,比如socket中的rece和send都變 # 為不阻塞了 def server(port): s = socket.socket() s.bind(("127.0.0.1",port)) s.listen(2000) while True: cli,add = s.accept() gevent.spawn(handle_request,cli) #通過gevent的啟動一個協程,把客戶端的socket對象傳進去 def handle_request(s): try: while True: data = s.recv(1024) print("收到的信息:",str(data,encoding="utf-8")) s.send(data) if not data: s.shutdown(socket.SHUT_WR) #把和客戶端這個鏈接銷毀 except Exception as ex: print(ex) finally: s.close() if __name__ == '__main__': server(8000)
在看客戶端的代碼,分別使用多線程和多進程實現
import socket import gevent import threading import multiprocessing ''' ip_bind = ("127.0.0.1",8000) c = socket.socket() c.connect(ip_bind) while True: data = input("客戶端:") c.send(bytes(data,encoding="utf-8")) data = c.recv(1024) print("服務端:",str(data,encoding="utf-8")) c.close() ''' import socket import gevent ip_bind = ("127.0.0.1",8000) c = socket.socket() c.connect(ip_bind) def f(n): while True: # c.send(bytes(n,encoding="utf-8")) data = str(n) c.send(bytes(data,encoding="utf-8")) data = c.recv(1024) print("server:",str(data,encoding="utf-8")) c.close() x = [] if __name__ == '__main__': l = [] """ 多線程實現并發客戶端 for i in range(500): t = threading.Thread(target=f,args=[str(i),]) t.start() l.append(t) for t in l: t.join() """ # 多進程實現并發客戶端 for i in range(100): p = multiprocessing.Process(target=f,args=[i,]) p.start() l.append(p) for p in l: p.join()
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。