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.
A continuación, creamos y ejecutamos el proyecto en Django. Aquí estoy usando la versión 2.2. Habrá una estructura similar a esta:
después de instalar Celery y Redis como broker.Ahora agregue un código para verificar:
CELERY_BROKER_URL = 'redis://demo_app_redis:6379'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
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()
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:
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!
Estamos esperando la instalación de todas las dependencias en el entorno pipenv. Al final, deberías ver algo como esto: ¡
Eso significa que todo es genial ! Puede controlar desde la línea de comandos:
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
esta manera, puede encender / apagar, reiniciar y eliminar el contenedor fácilmente.