0

我正在尝试编写一个使用邮戳客户端库发送电子邮件的芹菜任务。这是一个调用 postmarkapp.com API 端点的简单客户端库。

# In tasks.py

@app.task(bind=True)
def send_email(...):
    """Sends a single email via Postmark."""
    postmark = PostmarkClient(...)
    response = postmark.emails.send(...)
    log.info('Postmark API send_email response %s', response)

但是当我尝试在我的测试中执行任务时:

# in test_tasks.py

class PostmarkSendEmail(TestCase):
    def test_call_send_email(self):
        send_email(...)

我收到以下错误

TypeError: <@task: tasks.send_email of groot at 0x7f2c35b9e911> is not JSON serializable

我的问题是,是否可以在 celery 任务中使用此客户端库?有什么办法可以让我在 celery 任务中使用这个库吗?

4

1 回答 1

0

我发现问题出在bind=True传递给@app.task(). 解决方案是删除该参数:

@app.task()
def send_email(...):
    """Sends a single email via Postmark."""
    postmark = PostmarkClient(...)
    response = postmark.emails.send(...)
    log.info('Postmark API send_email response %s', response)

或者,我可以将self参数添加到send_email方法中:

@app.task(bind=True)
def send_email(self, ...):
    """Sends a single email via Postmark."""
    postmark = PostmarkClient(...)
    response = postmark.emails.send(...)
    log.info('Postmark API send_email response %s', response)

作为bind参数,将方法绑定到 App 实例。

于 2017-09-22T18:47:04.813 回答