使用asyncio在django中执行定期任务

Dav*_*ker 1 python django multithreading periodic-task python-asyncio

您是否认为可以使用asyncio在django中每n秒运行一次任务,这样主进程就不会被阻塞?

例如,在控制台中每5分钟打印一次,例如:

    import asyncio
    from random import randint

    async def do_stuff(something, howmany):   
        for i in range(howmany):
            print('We are doing  {}'.format(something))
            await asyncio.sleep(randint(0, 5))

    if __name__ == '__main__':
        loop = asyncio.get_event_loop()
        work = [
            asyncio.ensure_future(do_stuff('something', 5)),

        ]
        loop.run_until_complete(asyncio.gather(*work))
Run Code Online (Sandbox Code Playgroud)

似乎django将在循环运行时停止工作.即使这可以在开发中工作,当网站在像apache或gunicorn这样的东西上线时它会如何表现?

e4c*_*4c5 6

虽然通过大量的努力可以实现这一目标.更简单的是使用历史悠久的使用cron作业的做法.请参阅:使用django进行CLI工具

如今,一种更流行的方法(无论如何都是django开发者)就是使用芹菜.特别是芹菜击败

芹菜拍是一种调度者; 它定期启动任务,然后由群集中的可用工作节点执行.