4

私はpythonソケットクライアントを書いています

  1. message one(例: Hello) 5 秒ごと、message two(例: 15 秒) 15 秒ごとに送信
  2. いつでもメッセージを受信

別のスレッドで送受信を行うことを意味します。ただし、まだブロックされています。誰か提案がありますか?

スレッド #1

threading.Thread(target=Thread2, args=(sock)).start()
sock.recv(1024)

スレッド #2

def Thread2(sock):
    count = 0
    while True:
        sleep(5)
        count = count + 5
        sock.send('Hello')
        if count % 15 == 0
            sock.send('15 seconds')
4

1 に答える 1

3

ブロッキングではありません。メインスレッドが first の後に何もしないというだけですsock.recv(1024)。常にデータを収集するように指示する必要があります。

メインスレッド

threading.Thread(target=Thread2, args=(sock,)).start()
while True:
    data = sock.recv(1024)
    if not data:
        break
    print data

そのプロセスを簡単に中断することはできないことに注意してください。そのためには、スレッドをデーモンとして設定する必要があります。

メインスレッド

t = threading.Thread(target=Thread2, args=(sock,))
t.daemon = True
t.start()
while True:
    data = sock.recv(1024)
    if not data:
        break
    print data

また、渡すときはargs、タプルを渡すことを忘れないargs=(sock,)args=(sock)ください。Python の場合args=(sock)は と同等args=sockです。犯人はきっとこいつだ!

あなたのコードにはこれ以上の問題はありません。

于 2013-03-14T16:38:06.233 に答える