redis 是否可以使用Python-RQ将示例方法而不是函数入队?

yhived7q  于 2023-02-15  发布在  Redis
关注(0)|答案(1)|浏览(115)

Python-RQ文档中提供的示例始终显示使用queue.enqueue()将函数入队。例如:
job = q.enqueue(count_words_at_url, 'http://nvie.com')
是否可以将一个特定对象示例的方法排队?如果可以,这是否被认为是合理的做法?
例如:

member = Member.objects.get(id=142)
job = q.enqueue(member.send_email())

如果以上问题的答案是否定的,那么建议采用什么样的模式来处理这种情况?
我考虑过的一个可能性是创建一个helper函数,它独立于Member模型。例如:

def send_member_email_bg_task(member_id):
    Member.objects.get(id=member_id).send_email()

并按如下方式将其入队:

job = q.enqueue(send_member_email_bg_task, member.id)

我将非常感谢关于处理这一问题的最佳方法的建议。谢谢

mqkwyuun

mqkwyuun1#

您可以将任何可排队的对象入队,在本例中,该对象是绑定方法member.send_mail,而不是调用member.send_email()所产生的对象。

member = Member.objects.get(id=142)
job = q.enqueue(member.send_email)

member.send_email生成的绑定方法 Package membertype(member).send_email,并且在调用时以member作为其第一个参数来调用 Package 的函数。

相关问题