C実行可能ファイルとPythonスクリプトの間に通信パイプを確立しようとしています。以下はPythonスクリプトですが、これに関する奇妙な点は次のとおりです。以下のようにPythonスクリプトを実行すると、C実行可能ファイルにソケット上のデータが表示されることはありません。
ただし、Readerクラスのコメントを解除すると(つまり、ソケットへの書き込みのみが有効になる)、C実行可能ファイルは常にソケット上のデータを受信します。リーダースレッドとライタースレッドが同時に実行されているときにこれが機能しない理由を誰かが説明していますか?
class Reader(Thread):
def __init__(self):
Thread.__init__(self)
self.daemon = True
def run(self):
while True:
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect("/tmp/demo_socket")
nonce = s.recv(4)
s.close
if len(nonce) == 4:
print("Result received \n")
class Writer(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
while True:
payload = "Hello World"
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect("/tmp/demo_socket")
s.send(payload)
s.close()
reader = Reader()
writer = Writer()
reader.start()
writer.start()
try:
while True:
sleep(10000)
except KeyboardInterrupt:
print("Terminated")
編集:
提案されているように、私は以下のようにグローバルに接続を開こうとしていますが、それは私に2つの追加の問題を与えます:
1)データを送信した後、Python側で4バイトのみを受信する必要がありますが、データの無限のストリームを受信しているようです...
2)このグローバルに開かれたストリームはどこで閉じることができますか?
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect("/tmp/demo_socket")
class Reader(Thread):
def __init__(self):
Thread.__init__(self)
self.daemon = True
def run(self):
while True:
nonce = s.recv(4)
if len(nonce) == 4:
print("Result received \n")
class Writer(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
while True:
payload = "Hello World"
s.send(payload)
reader = Reader()
writer = Writer()
reader.start()
writer.start()
try:
while True:
sleep(10000)
except KeyboardInterrupt:
print("Terminated")