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

Python異步通信模塊asyncore解讀

 更新時(shí)間:2023年11月10日 08:54:59   作者:kongxx  
這篇文章主要介紹了Python異步通信模塊asyncore的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Python異步通信模塊asyncore

Python的asyncore模塊提供了以異步的方式寫入套接字服務(wù)的客戶端和服務(wù)器的基礎(chǔ)結(jié)構(gòu)。

模塊主要包括

  • asyncore.loop(…) - 用于循環(huán)監(jiān)聽網(wǎng)絡(luò)事件。loop()函數(shù)負(fù)責(zé)檢測(cè)一個(gè)字典,字典中保存dispatcher的實(shí)例。
  • asyncore.dispatcher類 - 一個(gè)底層套接字對(duì)象的簡(jiǎn)單封裝。這個(gè)類有少數(shù)由異步循環(huán)調(diào)用的,用來(lái)事件處理的函數(shù)。
  • dispatcher類中的writable()和readable()在檢測(cè)到一個(gè)socket可以寫入或者數(shù)據(jù)到達(dá)的時(shí)候被調(diào)用,并返回一個(gè)bool值,決定是否調(diào)用handle_read或者h(yuǎn)andle_write。
  • asyncore.dispatcher_with_send類 - 一個(gè) dispatcher的子類,添加了簡(jiǎn)單的緩沖輸出能力,對(duì)簡(jiǎn)單的客戶端很有用。

例子

下面看一個(gè)簡(jiǎn)單的例子

import time
import asyncore
import socket
import threading


class EchoHandler(asyncore.dispatcher_with_send):

    def handle_read(self):
        data = self.recv(1024)
        if data:
            self.send(data)

class EchoServer(asyncore.dispatcher):

    def __init__(self, host, port):
        asyncore.dispatcher.__init__(self)
        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
        self.set_reuse_addr()
        self.bind((host, port))
        self.listen(5)

    def handle_accept(self):
        conn, addr = self.accept()
        print 'Incoming connection from %s' % repr(addr)
        self.handler = EchoHandler(conn)

class EchoClient(asyncore.dispatcher):

    def __init__(self, host, port):
        asyncore.dispatcher.__init__(self)
        self.messages = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
        self.connect((host, port))

    def handle_connect(self):
        pass

    def handle_close(self):
        self.close()

    def handle_read(self):
        print self.recv(1024)

    def writable(self):
        return (len(self.messages) > 0)

    def handle_write(self):
        if len(self.messages) > 0: 
            self.send(self.messages.pop(0))

class EchoServerThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        server = EchoServer('localhost', 9999)
        asyncore.loop()

class EchoClientThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        client = EchoClient('localhost', 9999)
        asyncore.loop()

EchoServerThread().start()
time.sleep(2)
EchoClientThread().start()

EchoServer - 響應(yīng)服務(wù)器端程序,負(fù)責(zé)監(jiān)聽一個(gè)端口,并響應(yīng)客戶端發(fā)送的消息然后原樣返回給客戶端。

其中handle_accept()方法定義當(dāng)一個(gè)連接到來(lái)的時(shí)候要執(zhí)行的操作,這里指定了使用一個(gè)Handler來(lái)出來(lái)發(fā)送來(lái)的數(shù)據(jù)。

EchoHandler - 服務(wù)器端數(shù)據(jù)響應(yīng)類,接收數(shù)據(jù)并把數(shù)據(jù)原樣發(fā)回。

EchoClient - 響應(yīng)服務(wù)客戶端程序,負(fù)責(zé)連接響應(yīng)服務(wù)器。其中

  • messages - 定義了一個(gè)要發(fā)送的消息列表,每次發(fā)送一個(gè)消息,知道列表為空為止。
  • handle_read() - 處理接收到的數(shù)據(jù),這里把收到的數(shù)據(jù)打印的終端上。
  • writable() - 判斷是否有數(shù)據(jù)可以向服務(wù)器端發(fā)送。
  • handle_write() - 當(dāng)writable()函數(shù)返回True時(shí),寫入數(shù)據(jù)。

EchoServerThread - 用來(lái)啟動(dòng)服務(wù)器端程序的線程。

EchoClientThread - 用來(lái)啟動(dòng)客戶端端程序的線程。

測(cè)試

運(yùn)行上面的測(cè)試代碼,可以看到服務(wù)器和客戶端建立了連接后,響應(yīng)了客戶端發(fā)送來(lái)的10個(gè)數(shù)字,然后關(guān)閉了連接。

Incoming connection from ('127.0.0.1', 51424)
1
2
3
4
5
6
7
8
9
10

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python中的yield from語(yǔ)法快速學(xué)習(xí)

    python中的yield from語(yǔ)法快速學(xué)習(xí)

    在本篇文章里小編給大家整理的是一篇關(guān)于python中的yield from語(yǔ)法快速學(xué)習(xí)相關(guān)內(nèi)容,有興趣的朋友們可以參考下。
    2020-11-11
  • pytorch中Schedule與warmup_steps的用法說明

    pytorch中Schedule與warmup_steps的用法說明

    這篇文章主要介紹了pytorch中Schedule與warmup_steps的用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python生成一個(gè)迭代器的實(shí)操方法

    Python生成一個(gè)迭代器的實(shí)操方法

    在本文里小編給大家分享了關(guān)于Python怎么生成一個(gè)迭代器的相關(guān)操作方法,有需要的朋友們可以學(xué)習(xí)參考下。
    2019-06-06
  • Opencv實(shí)現(xiàn)二維直方圖的計(jì)算及繪制

    Opencv實(shí)現(xiàn)二維直方圖的計(jì)算及繪制

    這篇博客將介紹如何使用Opencv進(jìn)行二維直方圖的計(jì)算及繪制,維直方圖可以讓我們對(duì)不同的像素密度有更好的了解,感興趣的可以了解一下
    2021-07-07
  • Python人臉檢測(cè)實(shí)戰(zhàn)之疲勞檢測(cè)

    Python人臉檢測(cè)實(shí)戰(zhàn)之疲勞檢測(cè)

    本文主要介紹了實(shí)現(xiàn)疲勞檢測(cè):如果眼睛已經(jīng)閉上了一段時(shí)間,我們會(huì)認(rèn)為他們開始打瞌睡并發(fā)出警報(bào)來(lái)喚醒他們并引起他們的注意。感興趣的朋友可以了解一下
    2021-12-12
  • Python中逗號(hào)轉(zhuǎn)為空格的三種方法

    Python中逗號(hào)轉(zhuǎn)為空格的三種方法

    本文介紹了Python中將逗號(hào)轉(zhuǎn)換為空格的三種方法,包含使用replace函數(shù)、使用split函數(shù)、使用正則表達(dá)式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Python中is和==的區(qū)別詳解

    Python中is和==的區(qū)別詳解

    這篇文章主要介紹了Python中is和==的區(qū)別詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2018-11-11
  • wxPython中文教程入門實(shí)例

    wxPython中文教程入門實(shí)例

    這篇文章主要為大家分享下python編程中有關(guān)wxPython的中文教程,分享一些wxPython入門實(shí)例,有需要的朋友參考下
    2014-06-06
  • PyCharm自動(dòng)化測(cè)試的實(shí)現(xiàn)

    PyCharm自動(dòng)化測(cè)試的實(shí)現(xiàn)

    本文主要介紹了PyCharm自動(dòng)化測(cè)試的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • Python制作當(dāng)年第一款手機(jī)游戲-貪吃蛇游戲(練習(xí))

    Python制作當(dāng)年第一款手機(jī)游戲-貪吃蛇游戲(練習(xí))

    這篇文章主要介紹了Python制作當(dāng)年第一款手機(jī)游戲-貪吃蛇游戲,文章利用Python?pygame做一個(gè)貪吃蛇的小游戲而且講清楚每一段代碼是用來(lái)干嘛的,需要的朋友可以參考一下
    2022-01-01

最新評(píng)論

周至县| 宁德市| 定远县| 合作市| 乌兰察布市| 微博| 绥棱县| 竹山县| 德昌县| 祁门县| 射阳县| 普定县| 泰安市| 永春县| 尼木县| 张家界市| 类乌齐县| 青川县| 肥乡县| 密云县| 肥乡县| 宝应县| 鹿邑县| 囊谦县| 普陀区| 巨鹿县| 无锡市| 潍坊市| 肇东市| 海阳市| 灵璧县| 遂溪县| 武鸣县| 恩施市| 南靖县| 依安县| 揭东县| 呈贡县| 神木县| 当涂县| 三台县|