Python 为'ClassTask'mixin子类化芹菜任务
在回答我的问题之前,我对芹菜还不熟悉,这(1)可能在其他地方得到了回答(如果是这样,我找不到答案),或者(2)可能有比直接提问更好的方法来实现我的目标 另外,我知道芹菜的方法,但是任务方法并不能完全满足我的要求 我的目标 我想创建一个类mixin,将整个类转换为芹菜任务。例如,由以下代码表示的mixin(目前尚未运行): 与使用Python 为'ClassTask'mixin子类化芹菜任务,python,celery,celery-task,Python,Celery,Celery Task,在回答我的问题之前,我对芹菜还不熟悉,这(1)可能在其他地方得到了回答(如果是这样,我找不到答案),或者(2)可能有比直接提问更好的方法来实现我的目标 另外,我知道芹菜的方法,但是任务方法并不能完全满足我的要求 我的目标 我想创建一个类mixin,将整个类转换为芹菜任务。例如,由以下代码表示的mixin(目前尚未运行): 与使用task\u方法不同,我不希望在任务排队和调用.delay()之前完全实例化该类。相反,我只想将类名和任何相关的初始化参数一起传递给异步进程。然后,异步进程将使用类名和给
task\u方法
不同,我不希望在任务排队和调用.delay()
之前完全实例化该类。相反,我只想将类名和任何相关的初始化参数一起传递给异步进程。然后,异步进程将使用类名和给定的初始化参数完全实例化该类,然后在实例化对象上调用某些方法(例如.run\u now()
)
示例用例
异步构造和发送电子邮件将是我需要的mixin的一个示例
class WelcomeEmail(EmailBase, ClassTaskMixin):
def __init__(self, recipient_address, template_name, template_context):
self.recipient_address = recipient_address
self.template_name = template_name
self.template_context = template_context
def send(self):
self.render_templates()
self.construct_mime()
self.archive_to_db()
self.send_smtp_email()
def run_now(self):
self.send()
上述代码将通过调用WelcomeEmail.enqueue(收件人地址、模板名称、模板上下文)以异步芹菜流程发送电子邮件。通过调用WelcomeEmail(收件人地址、模板名称、模板上下文)。send(),可以在进程中同步发送电子邮件
问题
显然,这个问题对很多人来说并不是很有趣,但是。。。我已经完成了我开始要做的事情 有关详细信息,请参阅拉取请求
class WelcomeEmail(EmailBase, ClassTaskMixin):
def __init__(self, recipient_address, template_name, template_context):
self.recipient_address = recipient_address
self.template_name = template_name
self.template_context = template_context
def send(self):
self.render_templates()
self.construct_mime()
self.archive_to_db()
self.send_smtp_email()
def run_now(self):
self.send()