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这样的东西上线时它会如何表现?
虽然通过大量的努力可以实现这一目标.更简单的是使用历史悠久的使用cron作业的做法.请参阅:使用django进行CLI工具
如今,一种更流行的方法(无论如何都是django开发者)就是使用芹菜.特别是芹菜击败
芹菜拍是一种调度者; 它定期启动任务,然后由群集中的可用工作节点执行.