我正在尝试创建一个装饰器,它将自动对某些功能进行排队。
import functools
from rq import Queue
from worker import conn
q = Queue(connection=conn)
def fire_and_forget(func):
@functools.wraps(func)
def queue_function(*args, **kwargs):
try:
q.enqueue(func, *args, **kwargs)
except Exception as exc:
print('QUEUING FAILED')
print(str(exc))
print(func)
return None
return queue_function
然后我有一些功能可以说,
@fire_and_forget
def add(x, y):
return x + y
但是,这不起作用,因为入队的函数是 fire_and_forget 函数,该函数将另一个 fire_and_forget 函数入队,依此类推。工人们不停地排着队。
有什么办法解决这个问题?我一直试图弄清楚几个小时无济于事:\