celery worker --app=demo_app.core --pool=solo --logle...">

Python-Sellerie in Windows mit Docker-Verwaltung

Um Sellerie unter Windows " angemessen " zu debuggen, gibt es verschiedene Möglichkeiten:

> celery worker --app=demo_app.core --pool=solo --loglevel=INFO

Tatsächlich benötigen Sie für eine normale Entwicklung ein Unix-System. Wenn Sie nicht die Möglichkeit haben, es als Muttersprachler zu verwenden, sollten Sie überlegen ...) Nun, um ehrlich zu sein, gibt es immer einen Ausweg, und dies ist Docker sowie WSL. Wenn Sie solche „coolen“ IDEs wie PyCharm verwenden, wird alles komplizierter, da Sie bei Verwendung des Interpreters mit einer Quelle aus WSL nach der Installation des Pakets über pip das Projektgerüst aufgrund von Indexierungsproblemen manuell aktualisieren müssen.

Aber mit Docker ist alles anders. Für eine coole Verwaltung benötigen wir Windows 10 Pro, da die Home-Version keine Virtualisierung unterstützt.

Installieren und testen Sie nun Docker . Nachdem dies in der Taskleiste geschehen ist, wird das entsprechende Symbol angezeigt.

Bild

Als nächstes erstellen und führen wir das Projekt auf Django aus. Hier verwende ich Version 2.2. Es wird eine ähnliche Struktur geben:

Bild

Nachdem wir Celery und Redis als Broker installiert haben .

Fügen Sie nun einen Code hinzu, um Folgendes zu überprüfen:

# core/settings.py 
CELERY_BROKER_URL = 'redis://demo_app_redis:6379'
CELERY_ACCEPT_CONTENT = ['json'] 
CELERY_TASK_SERIALIZER = 'json'

# core/celery.py
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings')
app = Celery('core')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

# core/__init__.py
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)

Fügen Sie eine neue Django-Anwendung hinzu, in der unsere Aufgaben ausgeführt werden, und fügen Sie eine neue Datei hinzu:

# app/tasks.py
from celery.task import periodic_task
from datetime import timedelta

@periodic_task(run_every=(timedelta(seconds=5)), name='hello')
def hello():
    print("Hello there")

Als nächstes ein erstellen Dockerfile und Docker-compose.yml in der Wurzel des Projektes:

# Dockerfile
FROM python:3.7
RUN pip install pipenv
RUN mkdir /code
WORKDIR /code
COPY Pipfile* /code/
RUN pipenv install --system --deploy --ignore-pipfile
ADD core /code/

# docker-compose.yml
version: '3'

services:
  redis:
    image: redis
    restart: always
    container_name: 'demo_app_redis'
    command: redis-server
    ports:
      - '6379:6379'
  web:
    build: .
    restart: always
    container_name: 'demo_app_django'
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - '8000:8000'
  celery:
    build: .
    container_name: 'demo_app_celery'
    command: celery -A core worker -B
    volumes:
      - .:/code
    links:
      - redis
    depends_on:
      - web
      - redis

Und Start!

Bild

Wir warten auf die Installation aller Abhängigkeiten in der pipenv-Umgebung. Am Ende sollte man so etwas sehen:

Bild

Das heißt, alles ist cool ! Sie können über die Befehlszeile steuern:

Bild

Bild

Wie Sie sehen können, haben 2 Bilder, die aus einer Docker-Datei erstellt wurden, eine ID.

Sie können Container aber auch über die GUI verwalten:

Bild

Bild

Auf diese Weise können Sie den Container einfach ein- und ausschalten, neu starten und löschen.

Bild

All Articles