Python的asyncore客户机将定期数据发送到

2024-05-14 15:02:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要连接到服务器(例如smpp服务器)并每隔2秒发送一次周期性数据,代码如下:

import asyncore, socket, threading, time

class SClient(asyncore.dispatcher):
    buffer = ""
    t = None

    def __init__(self, host):
        asyncore.dispatcher.__init__(self)
        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
        self.connect( (host, 25) )

        print "sending data from __init__"
        self.sendCommand("data_init")
        self.t = SenderThread(self)
        self.t.start()

    def sendCommand(self, command):
        self.buffer = command

    def handle_close(self):
        self.close()
        self.t.stop()

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

    def writable(self):
        print 'asking for writable ? len='+str(len(self.buffer))
        return (len(self.buffer) > 0)

    def handle_write(self):
        print "writing to socket"
        sent = self.send(self.buffer)
        self.buffer = self.buffer[sent:]
        print "wrote "+str(sent)+" to socket"

class SenderThread(threading.Thread):
    _stop = False

    def __init__(self, client):
        super(SenderThread,self).__init__()
        self.client = client

    def stop(self):
        self._stop = True

    def run(self):
        counter = 0
        while self._stop == False:
            counter += 1
            time.sleep(1)
            if counter == 2:
                print "sending data from thread"
                self.client.sendCommand("data_thread")
                counter = 0

client = SClient('127.0.0.1')
asyncore.loop()

以下是运行时的输出:

^{pr2}$

我的线程每2秒通过buffer变量向服务器发送数据,但asyncore每1分钟调用一次writable和handle_write,我不明白为什么它在从线程中填充完缓冲区后不取缓冲区?在


Tags: selfclientdatainitdefbuffercountersocket
1条回答
网友
1楼 · 发布于 2024-05-14 15:02:23

查看asyncore loop方法的文档。在

The timeout argument sets the timeout parameter for the appropriate select() or poll() call, measured in seconds; the default is 30 seconds.

它只是每隔30秒启动一次句柄。在

相关问题 更多 >

    热门问题