小编svs*_*svs的帖子

为什么 python asyncio Loop.call_soon 会覆盖数据?

我在代码中创建了一个难以追踪的错误,但不明白为什么会发生。当多次推送相同的异步函数以立即调用时会出现问题。同步函数不会发生这种情况。

这是该问题的运行示例:

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)

python event-loop python-asyncio

0
推荐指数
1
解决办法
1386
查看次数

标签 统计

event-loop ×1

python ×1

python-asyncio ×1