如何等待分配给 loop.add_reader 的 fd 的关闭事件?
How to await on the closing event of the fd assigned to loop.add_reader?
让我们考虑这个示例代码:
myfd = ... # my fd, can be a socket for example
def reader():
data = myfd.recv(100)
print("Received:", data.decode())
asyncio.get_event_loop().loop.add_reader(myfd, reader)
asyncio.get_event_loop().run_forever()
我的问题是 asyncio.get_event_loop().run_forever()
部分。我想 await
代替 myfd 的关闭事件。
这是一个可能的解决方案:
myfd = ... # my fd, can be a socket for example
conn_closed = asyncio.Event() # <-- This is the solution
def reader():
try:
data = myfd.recv(100)
print("Received:", data.decode())
except EOFError: # connection closed
conn_closed.set()
except Exception as e:
print(f"Unexpected Exception: {e}")
conn_closed.set()
asyncio.get_event_loop().loop.add_reader(myfd, reader)
await conn_closed.wait()
让我们考虑这个示例代码:
myfd = ... # my fd, can be a socket for example
def reader():
data = myfd.recv(100)
print("Received:", data.decode())
asyncio.get_event_loop().loop.add_reader(myfd, reader)
asyncio.get_event_loop().run_forever()
我的问题是 asyncio.get_event_loop().run_forever()
部分。我想 await
代替 myfd 的关闭事件。
这是一个可能的解决方案:
myfd = ... # my fd, can be a socket for example
conn_closed = asyncio.Event() # <-- This is the solution
def reader():
try:
data = myfd.recv(100)
print("Received:", data.decode())
except EOFError: # connection closed
conn_closed.set()
except Exception as e:
print(f"Unexpected Exception: {e}")
conn_closed.set()
asyncio.get_event_loop().loop.add_reader(myfd, reader)
await conn_closed.wait()