본문 바로가기
Coding/Python

Python Celery Redis 연동하는 방법

by Hide­ 2018. 11. 7.
반응형

먼저 Redis부터 설치한다.

터미널에 아래의 명령어를 차례대로 입력한다.


$ wget http://download.redis.io/releases/redis-5.0.0.tar.gz
$ tar xzf redis-5.0.0.tar.gz
$ cd redis-5.0.0
$ make

(현재 5.0 버전이므로 추후 바뀔 수 있음. 그때는 https://redis.io/download 참고)



위처럼 나온다면 정상적으로 설치가 완료된 것이다.

혹시 모르니 실제로 실행시켜본다.

먼저 터미널에서 redis-server를 입력한다.


위와 같이 나온다면 정상적으로 서버가 실행된 모습이다.

이제 celery를 설치해야 한다.

파이썬으로 작업환경을 구축할 때는 가상환경을 통해 독립적인 공간을 만드는게 좋다.

(pipenv로 가상환경 구축하기 -> http://hides.tistory.com/913 참고)

구축했다고 가정하고 아래의 명령어를 입력하여 celery와 redis관련된 dependency들을 설치한다.


pipenv install 'celery[redis]'


또는 전역적으로 설치하고 싶다면 아래와 같이 입력한다.


pip3 install 'celery[redis]'


이제 tasks.py라는 파일을 생성하고 아래의 내용을 채워넣는다.


from celery import Celery


BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
app = Celery('tasks', broker=BROKER_URL, backend='redis://localhost', backend=CELERY_RESULT_BACKEND)

@app.task
def add(x, y):
return x + y

그리고 터미널에서 아래의 명령어를 입력한다.

(redis-server 명령어를 통해 미리 redis서버를 실행시켜놔야 한다)


celery -A tasks worker --loglevel=info


다음으로 publisher.py파일을 생성하고 아래의 내용을 넣는다.


from tasks import add

result = add.delay(4, 4)

그리고 python3 publisher.py를 통해 실행시켜보면 redis서버에 다음과 같이 로그가 남는다.

(delay()는 비동기로 실행하는 메소드다)



여기서 result.get()등의 메소드를 통해 결과값에 대한 핸들링을 할 수 있는데 나같은 경우 파이썬 3.7을 사용하고 있다.

자꾸 from . import async, base쪽에서 invalid syntax에러가 나서 구글링을 해보니 아직 3.7을 지원하지 않는다고 한다.

하위버전으로 진행하면 정상적으로 동작한다.