Python-Celery en Windows con gestión de Docker

Para depurar ' adecuadamente ' el apio desde Windows, hay varias formas, tales como:

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

Pero, de hecho, para el desarrollo normal, necesita un sistema Unix. Si no tiene la oportunidad de usarlo como nativo, entonces vale la pena considerarlo ...) Bueno, para ser honesto, siempre hay una salida y este es Docker, así como WSL. Si usa IDEs "geniales" como PyCharm, entonces todo se vuelve más complicado, porque cuando usa el intérprete con una fuente de WSL, después de instalar el paquete a través de pip, tendrá que actualizar manualmente el esqueleto del proyecto debido a problemas de indexación.

Pero con Docker, todo es diferente. Para una buena administración, necesitaremos Windows 10 Pro, ya que la versión Home no admite la virtualización.

Ahora instale y pruebe Docker . Después de que esto suceda en la bandeja, aparecerá el ícono correspondiente.

imagen

A continuación, creamos y ejecutamos el proyecto en Django. Aquí estoy usando la versión 2.2. Habrá una estructura similar a esta:

imagen

después de instalar Celery y Redis como broker.

Ahora agregue un código para verificar:

# 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',)

Agregue una nueva aplicación django en la que se realizarán nuestras tareas y agregue un nuevo archivo:

# 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")

A continuación, cree un Dockerfile y docker-compose.yml en la raíz del proyecto:

# 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

Y empieza!

imagen

Estamos esperando la instalación de todas las dependencias en el entorno pipenv. Al final, deberías ver algo como esto: ¡

imagen

Eso significa que todo es genial ! Puede controlar desde la línea de comandos:

imagen

imagen

Como puede ver, 2 imágenes que se crearon a partir de un Dockerfile tienen una ID.

Pero también puede administrar contenedores utilizando la GUI: de

imagen

imagen

esta manera, puede encender / apagar, reiniciar y eliminar el contenedor fácilmente.

imagen

All Articles