1

你认为可以在django中使用asyncio每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))

循环运行时,django 似乎会停止工作。即使这可以在开发中工作,当站点在 apache 或 gunicorn 上运行时它会如何表现?

4

1 回答 1

6

虽然有可能通过大量的努力来实现这一目标。更简单的是使用历史悠久的使用 cron 作业的做法。看到这个:使用 django 的 CLI 工具

现在一种更流行的方法(无论如何在 django 开发人员中)是使用 celery。特别是芹菜节拍

celery beat 是一个调度器;它定期启动任务,然后由集群中可用的工作节点执行。

于 2017-05-08T02:53:50.140 回答