0

私は、ソケットに接続してそれらを管理し、そのデータを処理し、それに基づいて処理を行うライブラリを作成しています。

私の問題は、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")

ありがとう

4

1 に答える 1

1

これ:

t = threading.Thread(self.pingTimer(wChSocket))

あなたが期待することをしません。同じスレッドで呼び出しself.pingTimer、戻り値を に渡しますthreading.Thread。それはあなたが望むものではありません。おそらくこれが必要です:

t = threading.Thread(target=self.pingTimer, args=(wChSocket,))
于 2013-04-12T02:50:01.517 に答える