in mijn 6 jaar ervaring met programmeren is Django zonder twijfel het beste framework waarmee ik ooit heb gewerkt. Soms zullen we het bouwen van een eenvoudige Django applicatie om async taken uit te voeren op de achtergrond met behulp van selderij en RabbitMQ.
Python 3.6.8, RabbitMQ 3.6.10
Django==2.2.3 , flower==0.9.3 , selderij = = 4.3.0
install RabbitMQ:
apt-get install rabbitmq-server
De RabbitMQ service start automatisch bij de installatie. U kunt de server handmatig starten door de volgende opdracht op de opdrachtregel uit te voeren.
rabbitmq-server
na de RabbitMQ installatie moet je python en gerelateerd pakket installeren met pip commando zoals:
pip install Django
pip install celery
dan moet je een Django project maken met een eenvoudige app, we maken djangocelery project met app l, je kunt het djangocelery project klonen op mijn GitHub.
Djangocelery project
djangocelery/|-- app/| |-- migrations/| |-- __init__.py| |-- admin.py| |-- apps.py| |-- models.py| |-- tests.py| +-- views.py|-- djangocelery/| |-- __init__.py| |-- settings.py| |-- urls.py| +-- wsgi.py|-- manage.py+-- requirements.txt
de eerste stap moet u de CELERY_BROKER_URL configuratie toevoegen aan de settings.py bestand:
instellingen.py
CELERY_BROKER_URL = ‘amqp://localhost’
Voeg Selderij aan uw Django Project
Maak een bestand met de naam celery.py naast je `settings.py` bestand,
|-- djangocelery/| |-- __init__.py| |-- celery.py| |-- settings.py| |-- urls.py| +-- wsgi.py
Dit bestand bevat de selderij configuratie voor ons project, de volgende code Toevoegen aan de `celery.py` bestand :
De bovenstaande code maakt u een exemplaar van ons project, De laatste regel instrueert de selderij om het automatisch ontdekken van alle asynchrone taken voor alle toepassingen vermeld onder `INSTALLED_APPS`.
Selery zoekt naar definities van asynchrone taken in een bestand met de naam `tasks.py ‘ bestand in elk van de applicatiemappen.
Bewerk de __init__.py
nu bewerken __init__.py bestand in de Project root met dit pad:
|-- djangocelery/| |-- __init__.py
open het en kopieer onderstaande code in het bestand en sla dat op.
Dit zorgt ervoor dat onze selderij app belangrijk is elke keer dat Django start.
eerste Selderietaak aanmaken
We kunnen een bestand met de naam taken aanmaken.py in een Django app en zet al onze selderij taken in dit bestand, de selderij app die we gemaakt in het project root zal alle taken gedefinieerd in alle Django apps vermeld in de INSTALLED_APPSconfiguration verzamelen.
app/tasks.py
app/views.py
in plaats van het celery_task direct aan te roepen, roep ik celery_task aan.delay (), op deze manier instrueren we Selery om deze functie op de achtergrond uit te voeren dan blijft Django mijn weergave verwerken celery_view en keert soepel terug naar de gebruiker
djangocelery/urls.py
maar voordat u het probeert, controleer de volgende sectie om te leren hoe u het Selderijwerkproces kunt starten.
het werkproces starten
Open een nieuw terminaltabblad op het projectpad en voer het volgende commando uit:
celery -A djangocelery worker -l info
het resultaat is ongeveer als volgt:
voer Django project open de http://127.0.0.1:8000/celerytask/ vervolgens na een paar seconden, Wanneer we de Selderij werkproces weer, kunnen we zien dat voltooid de uitvoering, de eerste lading pagina klaar en sturen taken selderij vervolgens selderij ontvangen taken:
After 30seconds tasks functions done and return successful strings :