[英]Python's asyncore client to send periodic data to server
我需要連接到服務器(例如 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()
這是運行時的output:
$ python test.py
sending data from __init__
asking for writable ? len=9
writing to socket
wrote 9 to socket
asking for writable ? len=0
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
asking for writable ? len=11
writing to socket
wrote 11 to socket
asking for writable ? len=0
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
asking for writable ? len=11
writing to socket
wrote 11 to socket
asking for writable ? len=0
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
sending data from thread
我的線程通過緩沖區變量每 2 秒向服務器發送一次數據,但是 asyncore 每 1 分鍾准確地調用一次可寫和句柄寫入,我不明白為什么它在從線程中填充后不獲取緩沖區?
查看asyncore 循環方法的文檔。
timeout 參數為適當的 select() 或 poll() 調用設置超時參數,以秒為單位; 默認值為 30 秒。
它只是每 30 秒觸發一次 handle_write。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.