私は、ソケットに接続してそれらを管理し、そのデータを処理し、それに基づいて処理を行うライブラリを作成しています。
私の問題は、b"\r\n\x00" を 20 秒ごとにソケットに送信することにあります。ping 機能用の新しいスレッドを開始すれば、うまくいくと思いました。
..しかし、 time.sleep() は、そのスレッドだけだと思っていたのではなく、プログラム全体を一時停止しているようです。
これまでの私のコードは次のとおりです。
def main(self):
recvbuf = b""
self.connect(self.group, self.user, self.password)
while self.connected:
rSocket, wSocket, error = select.select([x[self.group] for x in self.conArray], [x[self.group] for x in self.conArray], [x[self.group] for x in self.conArray], 0.2) #getting already made socket connections
for rChSocket in rSocket:
while not recvbuf.endswith(b"\x00"): #[-1] doesnt work on empty things... and recvbuf is empty.
recvbuf += rChSocket.recv(1024) #need the WHOLE message ;D
if len(recvbuf) > 0:
dataManager.manage(self, self.group, recvbuf)
recvbuf = b""
for wChSocket in wSocket:
t = threading.Thread(self.pingTimer(wChSocket)) #here's what I need to be ran every 20 seconds.
t.start()
x[self.group] for x in self.conArray.close()
pingTimer 関数は次のとおりです。
def pingTimer(self, wChSocket):
time.sleep(20)
print(time.strftime("%I:%M:%S %p]")+"Ping test!") #I don't want to mini-DDoS, testing first.
#wChSocket.send(b"\r\n\x00")
ありがとう