Reader と Writer の 2 つのスレッドがあります。
ライターはネットワークからデータを取得し、ソケットを介して実行可能ファイルに送信します。これが完了すると、ライターは Event.wait(askrate) で指定した最大 70 秒をブロックする必要があります。
これにより、実行可能ファイルが結果を計算して出力を送信するのに十分な時間が与えられます。計算が終了したら、Event.set() を使用して Writer スレッドのロックを解放し、実行可能ファイルなどに転送される次のデータを読み取ることができるようにしました。
私が抱えている問題は、リーダー スレッドがシリアル インターフェイスからの結果を待っている間、ライター スレッドがまだデータを読み続けていることです。
このブロッキングメカニズムがこれらの2つのスレッド間でうまく機能しない理由を知っている人はいますか?
askrate = 70
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:
submitter = Submitter(writer.block, nonce)
#submit result and release thread lock in Writer class
golden.set()
class Writer(Thread):
def __init__(self):
Thread.__init__(self)
self.daemon = True
def run(self):
while True:
work = bc.getwork()
self.block = work['data']
self.midstate = work['midstate']
payload = self.midstate.decode('hex') + self.block.decode('hex')
s.send(payload)
result = golden.wait(askrate)
if result:
golden.clear()
golden = Event()
reader = Reader()
writer = Writer()
reader.start()
writer.start()