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
ahhh! macht Sinn .. danke! – JamAndJammies