我有一堆 Django 请求,它们执行一些数学计算(用 C 编写并通过 Cython 模块执行),这可能需要不确定的时间(大约 1 秒)来执行。此外,请求不需要访问数据库,并且彼此独立且独立于 Django。
现在一切都是同步的(使用 Gunicorn 和sync
工人类型),但我想使其异步且非阻塞。简而言之,我想做一些事情:
- 接收AJAX请求
- 将任务分配给可用的工作人员(不阻塞主 Django Web 应用程序)
- Worker 在未知的时间内执行任务
- 每当任务完成时,Django 都会以 JSON 形式返回计算结果(字符串列表)
我对异步 Django 非常陌生,所以我的问题是执行此操作的最佳堆栈是什么。
任务队列非常适合这种过程吗?有人会推荐 Tornado + Celery + RabbitMQ 或其他东西吗?
提前致谢!
芹菜非常适合这个。
由于您正在做的事情相对简单(请阅读:您不需要关于如何路由任务的复杂规则),您可能可以使用 Redis 后端,这意味着您不需要设置/配置 RabbitMQ (根据我的经验,这更困难)。
我在 Celery 的开发版本中使用 Redis,以下是我的配置的相关部分:
# Use redis as a queue
BROKER_BACKEND = "kombu.transport.pyredis.Transport"
BROKER_HOST = "localhost"
BROKER_PORT = 6379
BROKER_VHOST = "0"
# Store results in redis
CELERY_RESULT_BACKEND = "redis"
REDIS_HOST = "localhost"
REDIS_PORT = 6379
REDIS_DB = "0"
我也在用django-celery
,这使得与 Django 的集成变得很愉快。
如果您需要任何更具体的建议,请发表评论。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)