рдбреЙрдХрд░ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдкрд╛рдпрдерди-рд╕реЗрд▓реЗрд░реА

рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рдиреАрдЪреЗ рд╕реЗ ' рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдбрд┐рдмрдЧ рд╕реЗрд▓реЗрд░реА' рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ рдЬреИрд╕реЗ:

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

рд▓реЗрдХрд┐рди, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпреВрдирд┐рдХреНрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕реЗ рдореВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ ...) рдареАрдХ рд╣реИ, рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрд╢рд╛ рдПрдХ рд░рд╛рд╕реНрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдбреЙрдХрд░ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдбрдмреНрд▓реНрдпреВрдПрд╕рдПрд▓ рднреА рд╣реИред рдпрджрд┐ рдЖрдк Pyharm рдХреА рддрд░рд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ "рдХреВрд▓" рдЖрдИрдбреАрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбрдмреНрд▓реНрдпреВрдПрд╕рдПрд▓ рдХреЗ рдПрдХ рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде рджреБрднрд╛рд╖рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдкрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрдВрдХрд╛рд▓ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде , рд╕рдм рдХреБрдЫ рдЕрд▓рдЧ рд╣реИред рдХреВрд▓ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ 10 рдкреНрд░реЛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд╣реЛрдо рд╕рдВрд╕реНрдХрд░рдг рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЕрдм рдбреЙрдХрд░ рдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓ рдФрд░ рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВ ред рдЯреНрд░реЗ рдореЗрдВ рдРрд╕рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╕рдВрдмрдВрдзрд┐рдд рдЖрдЗрдХрди рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред

рдЫрд╡рд┐

рдЕрдЧрд▓рд╛, рд╣рдо Django рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдореИрдВ 2.2 рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рд╕рдорд╛рди рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реЛрдЧреА:

рдЫрд╡рд┐

рд╣рдо рд╕реЗрд▓рд░реА рдФрд░ рд░реЗрдбрд┐рд╕ рдХреЛ рдмреНрд░реЛрдХрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж ред

рдЕрдм рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:

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

рдФрд░ рд╢реБрд░реВ рдХрд░реЛ!

рдЫрд╡рд┐

рд╣рдо рдкрд┐рдкреЗрдирд╡ рдкрд░реНрдпрд╛рд╡рд░рдг рдореЗрдВ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЫрд╡рд┐

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рд╣реИ ! рдЖрдк рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд

рдЫрд╡рд┐

рдЫрд╡рд┐

рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ : рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдбреЙрдХрд░рдлрд╛рдЗрд▓ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ 2 рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдЖрдИрдбреА рд╣реИред

рд▓реЗрдХрд┐рди рдЖрдк GUI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдЫрд╡рд┐

рдЫрд╡рд┐

рдЗрд╕ рддрд░рд╣, рдЖрдк рдХрдВрдЯреЗрдирд░ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЪрд╛рд▓реВ / рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкреБрдирд░рд╛рд░рдВрдн рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЫрд╡рд┐

All Articles