Redis Python和虚拟环境

kgqe7b3p  于 2023-05-28  发布在  Redis
关注(0)|答案(1)|浏览(126)

我想用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来运行它们?

jhdbpxl9

jhdbpxl91#

Redis在这里充当rq的代理。几乎每一个消息队列的实现都涉及到将消息沿着参数序列化为json(或其他格式,如pickle)并将其发送到redis服务器。一个rq worker被配置为监听同一个队列,并在消息被推送时处理它们。消息队列通常用于在不同的计算机上执行任务。
在当前的场景中,完全可以在不同的venv中执行任务。你只需要像rq那样将函数名字符串化,而不是导入函数并将它们作为引用传递。RQ在内部做同样的事情。它接受函数引用,将名称作为文本进行扩展,序列化作业参数并发送到redis服务器上的队列。

相关问题