我想用python向redis队列发送一些任务来执行。
有没有办法用不同的虚拟环境运行它们?我举一个例子:
from datetime import datetime, timedelta
import time
from redis import Redis
from rq import Queue,Retry
import tasks1 #this need some libs
import tasks2 #this need libs incompatible with task1
queue = Queue(connection=Redis())
def queue_tasks():
queue.enqueue(tasks1.print_task, 5, retry=Retry(max=2))
queue.enqueue_in(timedelta(seconds=10), tasks2.print_numbers, 5)
def main():
queue_tasks()
if __name__ == "__main__":
main()
或者我只能用我调用应用程序的env来运行它们?
1条答案
按热度按时间jhdbpxl91#
Redis在这里充当rq的代理。几乎每一个消息队列的实现都涉及到将消息沿着参数序列化为json(或其他格式,如pickle)并将其发送到redis服务器。一个rq worker被配置为监听同一个队列,并在消息被推送时处理它们。消息队列通常用于在不同的计算机上执行任务。
在当前的场景中,完全可以在不同的venv中执行任务。你只需要像rq那样将函数名字符串化,而不是导入函数并将它们作为引用传递。RQ在内部做同样的事情。它接受函数引用,将名称作为文本进行扩展,序列化作业参数并发送到redis服务器上的队列。