Windows中使用Docker管理的Python-Celery

为了从Windows下充分 ”调试Celery,有几种方法,例如:

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

但是,实际上,对于正常开发,您需要Unix系统。如果您没有机会将其用作本机,那么值得考虑...)好吧,老实说,总有一条出路,那就是Docker和WSL。如果使用像PyCharm这样的“酷” IDE,那么一切都会变得更加复杂,因为当将解释器与WSL的源一起使用时,通过pip安装软件包后,由于索引问题,您将必须手动更新项目框架。

但是使用Docker,一切都不同了。为了进行出色的管理,我们将需要Windows 10 Pro,因为家庭版不支持虚拟化。

现在安装并测试Docker在托盘中发生这种情况后,将出现相应的图标。

图片

接下来,我们在Django上创建并运行该项目。在这里,我使用的是2.2版。会有类似的结构:

图片

CeleryRedis安装为代理后。

现在添加一些代码来检查:

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

添加一个将在其中执行任务的新django应用程序并添加一个新文件:

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

接下来,在项目的根目录中创建一个Dockerfiledocker -compose.yml

# 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

并开始!

图片

我们正在等待在pipenv环境中安装所有依赖项。最后,您应该看到以下内容:

图片

这意味着一切都很酷您可以从命令行进行控制:

图片

图片

如您所见,从一个Dockerfile创建的2个映像具有一个ID。

但是您也可以使用GUI管理容器:

图片

图片

这样,您可以轻松地打开/关闭,重新启动,删除容器。

图片

All Articles