celery worker --app=demo_app.core --pool=solo --loglevel=INFO ولكن ، في ا...">

Python-Celery في Windows مع إدارة Docker

من أجل تصحيح "الكرفس " بشكل مناسب من تحت Windows ، هناك عدة طرق مثل:

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

ولكن ، في الواقع ، من أجل التطور الطبيعي ، تحتاج إلى نظام Unix. إذا لم تكن لديك الفرصة لاستخدامه كمواطن ، فمن الجدير التفكير فيه ...) حسنًا ، لنكون صادقين ، هناك دائمًا مخرج وهذا Docker ، وكذلك WSL. إذا كنت تستخدم IDEs "الرائعة" مثل PyCharm ، يصبح كل شيء أكثر تعقيدًا ، لأنه عند استخدام المترجم مع مصدر من WSL ، بعد تثبيت الحزمة من خلال النقطة ، سيكون عليك تحديث هيكل المشروع يدويًا بسبب مشاكل الفهرسة.

ولكن مع Docker ، كل شيء مختلف. لإدارة رائعة ، سنحتاج إلى Windows 10 Pro ، نظرًا لأن الإصدار Home لا يدعم المحاكاة الافتراضية.

الآن تثبيت واختبار Docker . بعد حدوث ذلك في الدرج ، سيظهر الرمز المقابل.

صورة

بعد ذلك ، نقوم بإنشاء المشروع وتشغيله على Django. هنا أستخدم الإصدار 2.2. سيكون هناك هيكل مشابه لما يلي:

صورة

بعد تثبيت Celery و Redis كوسيط.

الآن قم بإضافة بعض التعليمات البرمجية للتحقق:

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

بعد ذلك ، قم بإنشاء ملف Dockerfile و docker - 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 واحد لهما معرف واحد.

ولكن يمكنك أيضًا إدارة الحاويات باستخدام واجهة المستخدم الرسومية:

صورة

صورة

بهذه الطريقة ، يمكنك بسهولة تشغيل / إيقاف تشغيل أو إعادة تشغيل أو حذف الحاوية.

صورة

All Articles