우분투 파이썬에 Celery 설치

우분투 파이썬에 Celery 설치

2022-10-03 last update

7 minutes reading 우분투 Python3 Celery Redis 우분투20.04

우분투에 설치한 Python에 Celery를 설치하는 단계



외부 서버에 연결하여 작업자를 시작하고 메시지 가져오기



개발 환경



우분투 20.04.2 LTS
파이썬 3.8.10
장고 3.2.7
redis 3.5.3

설치되어 있는지 확인


[email protected]:/var $ sudo pip freeze
...何かしら色々リストがでる。その中でバージョンが書かれていればOK
celery==5.1.2
Django==3.2.7
redis==3.5.3

존재하지 않는 경우 설치



pip3 install 장고
pip3 install celery
pip3 install redis

var 아래에 www 디렉토리를 작성한다 (공통)


[email protected]:/var $ sudo mkdir www

www 아래에 django_app 디렉토리 만들기 (공통)


[email protected]:/var/www $ sudo mkdir django_app

django_app로 이동 (공통)


[email protected]:/var/www $ cd django_app

프로젝트 만들기 (공통)


[email protected]:/var/www/django_app $ sudo django-admin startproject celery_tutorial

생성 된 celery_tutorial로 이동 (공통)


[email protected]:/var/www/django_app $ cd celery_tutorial/

migrate 한다(공통)


[email protected]:/var/www/django_app/celery_tutorial $ sudo python3 manage.py migrate

celery_tutorial로 이동 (공통)


[email protected]:/var/www/django_app/celery_tutorial $ cd celery_tutorial/

celery.py 파일 만들기 (공통)


[email protected]:/var/www/django_app/celery_tutorial/celery_tutorial $ sudo vi celery.py

celery.py에 다음을 씁니다 (공통)


from __future__ import absolute_import, unicode_literals

import os

from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celery_tutorial.settings')

app = Celery('celery_tutorial')

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()

setting.py 열기 (Worker 측)


[email protected]:/var/www/django_app/celery_tutorial/celery_tutorial $ sudo vi settings.py

연결하려는 IP 주소를 추가합니다 (Worker 측).


sudo vi /var/www/django_app/celery_tutorial/celery_tutorial/settings.py
CELERY_BROKER_URL = 'redis://1xx.1xx.2xx.2xx:6379'

연결하려는 IP 주소를 추가합니다 (Broker 측).


sudo vi /var/www/django_app/celery_tutorial/celery_tutorial/settings.py
CELERY_BROKER_URL = ['*']

init.py 열기 (공통)


[email protected]:/var/www/django_app/celery_tutorial/celery_tutorial $ sudo vi __init__.py

init.py에 다음을 추가 (공통)


from __future__ import absolute_import, unicode_literals

# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app

__all__ = ('celery_app',)

celery.py에 추가 (Worker 측)


from __future__ import absolute_import, unicode_literals

import os

from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celery_tutorial.settings')

app = Celery('celery_tutorial')

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()

##ここから追加###
@app.task
def debug_task(x, y):
    print('wwwww')
    return x + y
##追加ここまで###

/etc/redis/redis.conf 변경 외부 연결 가능(Broker측)


#bind 127.0.0.1 -::1
bind 0.0.0.0

redis.conf를 다시 작성한 후 redis 재부팅 (브로커 측)


[email protected]:/var/www/django_app/celery_tutorial/celery_tutorial $ sudo systemctl status redis