Python 为'ClassTask'mixin子类化芹菜任务

Python 为'ClassTask'mixin子类化芹菜任务,python,celery,celery-task,Python,Celery,Celery Task,在回答我的问题之前,我对芹菜还不熟悉,这(1)可能在其他地方得到了回答(如果是这样,我找不到答案),或者(2)可能有比直接提问更好的方法来实现我的目标 另外,我知道芹菜的方法,但是任务方法并不能完全满足我的要求 我的目标 我想创建一个类mixin,将整个类转换为芹菜任务。例如,由以下代码表示的mixin(目前尚未运行): 与使用task\u方法不同,我不希望在任务排队和调用.delay()之前完全实例化该类。相反,我只想将类名和任何相关的初始化参数一起传递给异步进程。然后,异步进程将使用类名和给

在回答我的问题之前,我对芹菜还不熟悉,这(1)可能在其他地方得到了回答(如果是这样,我找不到答案),或者(2)可能有比直接提问更好的方法来实现我的目标

另外,我知道芹菜的方法,但是任务方法并不能完全满足我的要求

我的目标

我想创建一个类mixin,将整个类转换为芹菜任务。例如,由以下代码表示的mixin(目前尚未运行):

与使用
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(),可以在进程中同步发送电子邮件

问题

  • 在芹菜的框架内,我试图做的是非常非常错误的,有什么原因吗
  • 有没有更好的方法来构造mixin,使其比我提出的方法(更好的属性名、不同的方法结构等)更具芹菜风味
  • 正如我所描述的,在用例中,我缺少了什么使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()