我在代码中创建了一个难以追踪的错误,但不明白为什么会发生。当多次推送相同的异步函数以立即调用时会出现问题。同步函数不会发生这种情况。
这是该问题的运行示例:
import asyncio
import sys
class TestObj(object):
def __init__(self):
self.test_data = {'a': 1, 'b': 2, 'c': 3}
self.loop = asyncio.get_event_loop()
self.loop.call_later(1, lambda: asyncio.ensure_future(self.calling_func()))
self.loop.call_later(2, self.calling_func_sync)
self.loop.call_later(4, sys.exit)
self.loop.run_forever()
async def do_something(self, k, v):
print("Values", k, v)
async def calling_func(self):
for k, v in self.test_data.items():
print("Sending", k, v)
self.loop.call_soon(lambda: asyncio.ensure_future(self.do_something(k, v)))
def do_something_sync(self, k, v):
print("Values_sync", k, v)
def calling_func_sync(self):
for k, v in self.test_data.items():
print("Sending_sync", k, v)
self.loop.call_soon(self.do_something_sync, k, v)
if __name__ == "__main__":
a = TestObj()
Run Code Online (Sandbox Code Playgroud)
输出是:
Sending …Run Code Online (Sandbox Code Playgroud)