我有两个线程,Reader 和 Writer。
Writer 从网络获取数据,然后通过套接字将其发送到某个可执行文件。完成此操作后,作者应阻止最多 70 秒,我使用 Event.wait(askrate) 指定。
这应该给可执行文件足够的时间来计算结果,然后提交输出。如果计算完成,我使用 Event.set() 来释放 Writer 线程上的锁,以便它可以读取下一个被转发到可执行文件的数据,依此类推。
我遇到的问题是,Writer 线程仍在继续读取数据,而 Reader 线程正在等待来自串行接口的结果。
有人知道为什么这种阻塞机制在这两个线程之间不能正常工作吗?
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()