簡體   English   中英

延遲調用芹菜任務被卡住

[英]calling celery task with delay gets stuck

芹菜任務定義如下:

from celery.decorators import task

@task(name="send_email")
def send_email(email, host):

當這樣調用時,Django被卡住:

send_email.delay(email, host)

就像不是異步運行一樣

我想念什么?

這些是一些芹菜設置,它使用redis作為代理:

>>> settings.CELERY_ACCEPT_CONTENT
[u'application/json']
>>> settings.CELERY_BROKER_URL
u'redis://redis:6379/0'
>>> settings.CELERY_RESULT_BACKEND
u'redis://redis:6379/0'
>>> settings.CELERY_RESULT_SERIALIZER
u'json'
>>>

我希望發表評論,但我首先需要50個代表,但我們需要其余的功能。 除非您向我們展示您正在做的所有事情,否則無法修復。 因為您沒有顯示它,所以我將向您顯示我的一個,希望它可以使您清楚自己做錯了什么。 我有一些celery電子郵件函數,但是它們只接受1個參數(對象的ID),然后將值返回給調用它的函數。 請注意,您還需要使settings.py包含正確的EMAIL_BACKEND等設置(例如EMAIL_HOST等)。

但是,如果僅使用控制台,則唯一需要的電子郵件設置是EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' 只要運行芹菜,並且所有內容都指向正確的位置,以下示例便可以使用此示例。

例:

假設模型等已正確導入,因此短絨未顯示任何錯誤,並且所有這些都在一個文件中。

@task
def order_created(order_id):
    """Task to send an email notification when an order is successfully created"""
    order = Order.objects.get(id=order_id)
    subject = 'Order number {}'.format(order.id)
    message = 'Dear {},\n\nYou have successfully made an order. Your order id is {}.'.format(order.first_name, order.id)
    mail_sent = send_mail(subject, message, 'you@your_email.com', [order.email])
    return mail_sent



def make_an_order(request):
    cart = Cart(request)
    if request.method == 'POST':
        form = OrderCreateForm(request.POST)
        if form.is_valid():
            order = form.save()
            for item in cart:
                OrderItem.objects.create(order=order, product=item['product'], price=item['price'], quantity=item['quantity'])
            cart.clear()
            order_created.delay(order.id)    # id is passed to celery function
            request.session['order_id'] = order.id
            return redirect(reverse('payment_app:process'))
    else:
        form = OrderCreateForm()  # instantiates form based on Order model.
        return render(request, 'orders_app/create.html', {'cart': cart, 'form': form})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM