私はソケットを使用して通信するインターフェイスで作業しています。私は同時にデータを送受信するためにスレッドを使用する必要があります。キーボード割り込み、ソケット、スレッド
以下のコードは、連続的にデータを送信するモジュールの縮小版です。
私の問題は、開発中にこれを頻繁に開始して停止する必要がありますが、スレッドは通常のスクリプトと同様にアプリケーションを停止できないようです。プロセスを再起動するには、そのプロセスをプロセスマネージャーで強制終了する必要があります。
私は何かを誤解していると感じています。
私は周りを見回しましたが、私は役に立たないように実装しようとした矛盾した答えがたくさん出てきています。私はKeyboardInterrupt例外を処理しようとしたが動作しません。
アイデア?
import socket
import sys
import threading
running = True
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost', 50000)
print ('connecting to %s port %s' % server_address)
sock.connect(server_address)
class TelemetryPacket:
state = "N/A"
def __init__(self, stringvalue):
self.state = stringvalue
def serialise(self):
return "%s" % (self.state)
def send(running):
try:
while (running):
telemetry = TelemetryPacket(0).serialise()
sock.sendto(telemetry.encode('utf-8'), server_address)
except KeyboardInterrupt:
print ("threads successfully closed")
running = False
def recv(running):
try:
while (running):
data = sock.recv(1)
if (data):
print("data received: %s" % data)
except KeyboardInterrupt:
print ("threads successfully closed")
running = False
a = threading.Thread(target=send, args=(running,))
a.start()
b = threading.Thread(target=recv, args=(running,))
b.start()
'靴下= socket.socketを(はsocket.AF_INET、socket.SOCK_STREAM)'と**:あなたもそう、基本的な
threading.Event()
のようなシグナリングのためのより多くのスレッドが安全なものを使用する必要があります同時にデータを送受信する**まず、ソケットライブラリについて学びます。 TCP接続でリアルタイムアプリケーションを書くことはできません! – dsgdfg@dsgdfgあなたは良い点を作っています。私は1つのタイプの "ソケット"があると仮定していたので、このライブラリはすべてのUDPであると仮定しました。 これは単なるプロトタイプであるため、今は問題ありません。私は間違いなく、後で適切な解決策を検討します、ありがとう! – Gordon13