最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 實現(xiàn)socket服務(wù)端并發(fā)的四種方式

 更新時間:2020年12月14日 16:57:55   作者:the3times  
這篇文章主要介紹了python 實現(xiàn)socket服務(wù)端并發(fā)的四種方式,幫助大家更好的理解和使用python,感興趣的朋友可以了解下

多進(jìn)程&多線程

服務(wù)端:多進(jìn)程和多線程的開啟方式相同。

缺點:<1> 由于Cpython的GIL,導(dǎo)致同一時間無法運(yùn)行多個線程;<2> 不可能無限開進(jìn)進(jìn)程或線程

解決辦法:多進(jìn)程、concurrent.futures.ProcessPoolExecutor、線程池

import socket
from multiprocessing import Process
from threading import Thread


class MyTcpServer:
  def __init__(self, ip, port):
    self.ip = ip
    self.port = port
    self.server = socket.socket()
    self.server.bind((self.ip, self.port))
    self.server.listen(5)

  def wait_accept(self):
    conn, addr = self.server.accept()
    return conn, addr

  def handle_request(self, conn):
    while 1:
      try:
        data = conn.recv(1024)
        if not data: break
        conn.send(data.upper())
      except Exception as e:
        print(e)
        break
    conn.close()


if __name__ == '__main__':
  server = MyTcpServer('127.0.0.1', 8888)
  while 1:
    conn, addr = server.wait_accept()
    p = Process(target=server.handle_request, args=(conn, ))	# 創(chuàng)建一個進(jìn)程
    p.start()	# 告訴操作提供,開啟這個進(jìn)程

進(jìn)程池&線程池

異步提交任務(wù),支持異步接收返回結(jié)果(submit返回一個futures對象,調(diào)用add_done_callback方法)

import socket
from concurrent.futures import ProcessPoolExecutor
# from concurrent.futures import ThreadPoolExecutor


class MyTcpServer:
  def __init__(self, ip, port):
    self.ip = ip
    self.port = port
    self.server = socket.socket()
    self.server.bind((self.ip, self.port))
    self.server.listen(5)

  def wait_accept(self):
    conn, addr = self.server.accept()
    return conn, addr

  def handle_request(self, conn):
    while 1:
      try:
        data = conn.recv(1024)
        if not data: break
        conn.send(data.upper())
      except Exception as e:
        print(e)
        break
    conn.close()


if __name__ == '__main__':
  server = MyTcpServer('127.0.0.1', 8888)
  pool = ProcessPoolExecutor(5)    # 5個進(jìn)程一直服務(wù)

  while 1:
    conn, addr = server.wait_accept()
    pool.submit(server.handle_request, conn)	# 異步提交任務(wù)

socketserver

優(yōu)點:簡化socket服務(wù)端創(chuàng)建流程。
提供服務(wù)端串行和并發(fā)兩種服務(wù)模式(TCPServer,ThreadingTCPServer)
缺點:windows上無法使用多進(jìn)程實現(xiàn)并發(fā)

import socketserver


class MyTcpHandler(socketserver.BaseRequestHandler):
  def handle(self):		# 通信循環(huán)
    while 1:
      try:
        data = self.request.recv(1024)
        if not data: break
        self.request.send(data.upper())
      except Exception as e:
        print(e)
        break
    self.request.close()


if __name__ == '__main__':
  ip_port = '127.0.0.1', 8888
  server = socketserver.ThreadingTCPServer(ip_port, MyTcpHandler) # 異步處理 
  server.serve_forever()		# 連接循環(huán)

協(xié)程

優(yōu)點:單線程內(nèi)實現(xiàn)并發(fā),代碼級別模擬IO切換,提高程序運(yùn)行效率

from gevent import spawn, monkey;monkey.patch_all()		# 猴子補(bǔ)丁,補(bǔ)丁:常規(guī)IO
import socket


class MyTcpServer:
  def __init__(self, ip, port, my_spawn):
    self.ip = ip
    self.port = port
    self.server = socket.socket()
    self.server.bind((self.ip, self.port))
    self.server.listen(5)
    self.spawn = my_spawn		# 保存spawn本地

  def wait_accept(self):
    while 1:
      conn, addr = self.server.accept()
      self.spawn(self.handle_request, conn)	# 檢測 handle_request的io

  def handle_request(self, conn):
    while 1:
      try:
        data = conn.recv(1024)
        if not data: break
        conn.send(data.upper())
      except Exception as e:
        print(e)
        break
    conn.close()


if __name__ == '__main__':
  server = MyTcpServer('127.0.0.1', 8888, spawn)
  g1 = server.spawn(server.wait_accept)	# 檢測wait_accept的io
  g1.join()	# 等待g1運(yùn)行結(jié)束,即一直在循環(huán)檢測io

以上就是python 實現(xiàn)socket服務(wù)端并發(fā)的四種方式的詳細(xì)內(nèi)容,更多關(guān)于python socket服務(wù)端并發(fā)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入探究python中Pandas庫處理缺失數(shù)據(jù)和數(shù)據(jù)聚合

    深入探究python中Pandas庫處理缺失數(shù)據(jù)和數(shù)據(jù)聚合

    在本篇文章中,我們將深入探討Pandas庫中兩個重要的數(shù)據(jù)處理功能:處理缺失數(shù)據(jù)和數(shù)據(jù)聚合,文中有詳細(xì)的代碼示例,對我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-07-07
  • 使用PyInstaller?打包配置文件

    使用PyInstaller?打包配置文件

    這篇文章主要介紹了使用PyInstaller?打包配置文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Python的psutil模塊詳解

    Python的psutil模塊詳解

    psutil是一個跨平臺庫,能夠輕松實現(xiàn)獲取系統(tǒng)運(yùn)行的進(jìn)程和系統(tǒng)利用率(包括CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等)信息,需要的朋友可以參考下
    2023-05-05
  • 簡單了解python 生成器 列表推導(dǎo)式 生成器表達(dá)式

    簡單了解python 生成器 列表推導(dǎo)式 生成器表達(dá)式

    這篇文章主要介紹了簡單了解python 生成器 列表推導(dǎo)式 生成器表達(dá)式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • python數(shù)據(jù)處理之如何選取csv文件中某幾行的數(shù)據(jù)

    python數(shù)據(jù)處理之如何選取csv文件中某幾行的數(shù)據(jù)

    這篇文章主要給大家介紹了關(guān)于python數(shù)據(jù)處理之如何選取csv文件中某幾行的數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • python列表的切片賦值實現(xiàn)

    python列表的切片賦值實現(xiàn)

    Python列表切片賦值是一種將一個列表的特定部分替換為新的元素的操作,本文主要介紹了python列表的切片賦值實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Python企業(yè)編碼生成系統(tǒng)總體系統(tǒng)設(shè)計概述

    Python企業(yè)編碼生成系統(tǒng)總體系統(tǒng)設(shè)計概述

    這篇文章主要介紹了Python企業(yè)編碼生成系統(tǒng)總體系統(tǒng)設(shè)計,簡單描述了Python企業(yè)編碼生成系統(tǒng)的功能、結(jié)構(gòu)與相關(guān)編碼實現(xiàn)技巧,需要的朋友可以參考下
    2019-07-07
  • python2.7實現(xiàn)FTP文件下載功能

    python2.7實現(xiàn)FTP文件下載功能

    這篇文章主要為大家詳細(xì)介紹了python 2.7 實現(xiàn)FTP文件下載功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python中POST調(diào)用Restful接口示例

    Python中POST調(diào)用Restful接口示例

    這篇文章主要介紹了Python之POST調(diào)用Restful接口示例,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • 淺談python中的實例方法、類方法和靜態(tài)方法

    淺談python中的實例方法、類方法和靜態(tài)方法

    本文主要介紹了python 實例方法、類方法和靜態(tài)方法的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02

最新評論

城口县| 大邑县| 银川市| 攀枝花市| 新安县| 五寨县| 富源县| 蕲春县| 西吉县| 丹巴县| 特克斯县| 体育| 安远县| 岚皋县| 固始县| 乐都县| 贵德县| 肃北| 达日县| 无极县| 闸北区| 东乌珠穆沁旗| 乌苏市| 凤山市| 中江县| 定州市| 贵州省| 丰镇市| 义乌市| 鲁甸县| 威信县| 景德镇市| 板桥市| 宁津县| 嘉善县| 乌兰察布市| 天水市| 玉门市| 夏河县| 富阳市| 伊宁市|