1
我有两个线程,Reader和Writer。Python线程通信不起作用
Writer从网络获取数据,然后通过套接字发送给一些可执行文件。完成此操作后,作者应该阻止多达70秒的时间,并使用Event.wait(askrate)指定。
这应该给可执行程序足够的时间来计算结果,然后提交输出。如果计算完成,我使用Event.set()释放Writer 线程上的锁定,以便它可以读取下一个被强制执行的数据,依此类推。
我遇到的问题是,当Reader线程正在等待通过串行接口的结果时,Writer线程仍然保持读取数据。
任何人都知道为什么这种阻塞的meachnism不是在这两个线程之间进行精确的工作?
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()
你可以简化这个:把所有的工作和网络代码拿出来。现在,如果读者只是睡觉(比'askrate'秒长),然后设置事件,那么作者会发生什么?它多久醒来一次,返回什么值? – Useless
好的,谢谢我会尝试。但一见钟情,一切都好看?我使用Python 3.3,如果这有所作为! – Patrick