特定时间的asyncio调度回调

时间:2016-08-09 09:29:34

标签: python python-asyncio

在下面的代码中,回调()不会在重复时间调用(现在+ 0.2和现在+ 0.1)以及stop(),这里有什么错误

    def callback(n,loop):
        print('Callback {} invoked at {}'.format(n,loop.time()))

    def stopper(loop):
        print("Stopper invoked at {}".format(loop.time()))
        loop.stop() 

    event_loop = asyncio.get_event_loop()
    try:
        now =event_loop.time()
        print('clock time: {}'.format(time.time()))
        print('loop time: {}'.format(now))
        print('Registering callbacks')
        event_loop.call_later(now + 0.2,callback,1,event_loop)
        event_loop.call_later(now + 0.1,callback,2,event_loop)
        event_loop.call_later(now + 0.3,stopper,event_loop)
        event_loop.call_soon(callback,3,event_loop)
        print('Entering event loop')
        event_loop.run_forever()
    finally:
        print('Closing event loop')
        event_loop.close();

1 个答案:

答案 0 :(得分:2)

.call_later(delay, cb, *args)需要delay个参数,以秒为单位的时间增量(float)。

但是你将now + delay传递给这些电话。

删除now或将.call_later()替换为.call_at()