我想在协程之间同步数据,最终得到一个方法,只要其中有“yield”就不会被调用。
更准确地说,当我按照文档(受此启发)使用方法 datagram_received 实现 DatagramProtocol 类时,一切正常,我收到了数据。一旦我在方法 datagram_received 中添加“yield”,该方法就不再被调用。这是一个例子:
loop = asyncio.get_event_loop()
lock = asyncio.Lock(loop=loop)
class MyProtocol(asyncio.DatagramProtocol):
def datagram_received(self, data, addr):
global my_data, lock
print("here")
# uncomment the following lines and datagram_received is
# not called at all (never see the "here" on the console)
#yield from lock
#try:
# my_data = float(data.decode())
#finally:
# lock.release()
loop.run_until_complete(loop.create_datagram_endpoint(MyProtocol, sock=create_socket(10000)))
loop.run_forever()
根据方法的内容,如何突然不调用方法?
我错过了什么?应该如何进行同步?