2017-10-05 1 views
0

Die Aufgabe wird ausgeführt, aber meine Seite wartet darauf, dass sie die Aufgabe beendet und lädt dann die Seite. Ziemlich viel besiegt den Zweck der asynchronen plus Ich bekomme ein Timedout auf Heroku - separates Problem. Also rufe ich die Aufgabe in views.py an und sende sie an tasks.py. Nicht sicher, was ich sonst noch brauche, aber logisch richtig zu mir aussieht?Warum wird beim Laden der Seite nicht die Sellerie-Aufgabe asynchronisiert?

settings.py

BROKER_URL=['amqp://[email protected]//','cloudamqp'] 
BROKER_POOL_LIMIT = 1 
BROKER_CONNECTION_MAX_RETRIES = None 
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' 
CELERY_ACCEPT_CONTENT = 'pickle', 
CELERY_TASK_SERIALIZER = 'json', 
CELERY_RESULT_SERIALIZER = 'json' 
CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend' 
CELERY_ALWAYS_EAGER = True 

views.py

def my_page(request): 
    #do something 

    #this is at the end, right before return. 
    #If I put it in the middle, it runs in sequence. So I don't see anything after this until the task is done. 
    get_data.delay(args) 
    return (request, 'home.html') 

tasks.py

from __future__ import absolute_import, unicode_literals 
import requests 
import json 
import time 
import sys 
import os 
import random 
from os import path 
from celery import Celery 
sys.path.append(path.dirname(path.dirname(path.abspath(__file__)))) 
from lib import myfiles 
from django.db import models 
from .models import mymodels 
import django 
django.setup() 

@task(name="get_myfunction") 
def get_data(user, items): 
    #runs a bunch of things 
    #saves data 
    #all this and page spinner on the browser tab just keeps spinning until its done 

Antwort

0

CELERY_ALWAYS_EAGER = True sollte CELERY_ALWAYS_EAGER = False

Vonsein:

Wenn dies wahr ist, werden alle Aufgaben lokal bis durch die Blockierung der Aufgabe zurückkehrt ausgeführt werden.

+0

ahhh! macht Sinn .. danke! – JamAndJammies

Verwandte Themen