请教一个关于任务队列的问题,关于 celery/rq/huey/dramatiq。

查看 53|回复 1
作者:DejaVud   
一个典型的 rq 使用示例如下:
worker.py
import requests
def count_words_at_url(url):
    resp = requests.get(url)
    return len(resp.text.split())
main.py
from redis import Redis
from rq import Queue
from worker import count_words_at_url
q = Queue(connection=Redis())
result = q.enqueue(count_words_at_url, 'http://nvie.com')
但是我希望生产者( main.py )和消费者( worker.py )代码是解耦的,就是不要在 main.py 中 from worker import count_words_at_url ,生产者只知道要调用函数名和参数,比如类似下面这样的形式:
result = q.send_task(task_name="count_words_at_url", args=["http://nvie.com",])
这样,我就可以把 worker 的代码项目单独独立出去,而 main.py 项目里完全不会有 count_words_at_url 函数的相关实现。
我知道 celery 是可以这样实现的,我的问题是 rq 、huey 、dramatiq 这三个库可以实现出这样吗?

import, Python, Redis, Worker

DejaVud
OP
  
补充一下,我之所以有这样的需求是因为,存在一种这样的场景:
main.py 是一个 web 后端应用,worker.py 是一个计算任务如 AI 推理,在我的理解里 web 后端代码和 AI 推理代码本应属于不同的 2 个项目,代码不应当糅合在一起,web 代码就不需要知道任务函数是如何实现的。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部