簡體   English   中英

定期調用異步 function?

[英]Call an async function periodically?

我有以下 function 每隔一秒調用一次s(c)

def schedule_next_sync():
    t = datetime.datetime.now() + datetime.timedelta(seconds=1)
    def wrapper():
        s(c)
        schedule_next_sync()
    tornado.ioloop.IOLoop.current().add_timeout(datetime.datetime.timestamp(t), wrapper)

但是, s()將更改為異步 function。

async def s(c):

如何更新異步 function 的schedule_next_sync 應該同步運行s()嗎? 或者將schedule_next_sync()更改為異步 function?

一旦s是異步的,您就可以使用asyncio.sleep()而不是較低級別的add_timeout()

async def schedule_next_sync():
    async def call_forever():
        while True:
            await asyncio.sleep(1)
            await s(c)
    tornado.ioloop.IOLoop.current().create_task(call_forever())

如果你真的想用超時來做,這樣的事情應該可以工作:

def schedule_next_sync():
    t = datetime.datetime.now() + datetime.timedelta(seconds=1)
    def wrapper():
        loop = asyncio.get_running_loop()
        task = loop.create_task(s(c))
        task.add_done_callback(lambda _: schedule_next_sync())
    loop = tornado.ioloop.IOLoop.current()
    loop.add_timeout(datetime.datetime.timestamp(t), wrapper)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM