- Celeny는 플라스크와 독립적으로 실행할 수 있습니다. 프로젝트 일관성을 유지하기 위해이 프로젝트에서 celeny는 여전히 lghome 아래에 정의되어 있습니다.
2. 프로젝트 예
- 이 프로젝트는 생산자-소비자 개발 모델을 사용하여 짧은 메시지를 보내고 셀러리를 채택합니다.
1. 초기 실현
1.1 작업 정의
- 셀러리 패키지 설치
- 셀러리 패키지의 셀러리 클래스를 소개합니다. 이름을 home으로 지정하고 데이터를 redis에 저장하고 다른 데이터와 구별 할 수 있도록 데이터베이스 1에 저장합니다.
- celery_app 개체 만들기
- SMS 전송 작업 정의
from celery import Celery
celery_app=Celery("home",broken="redis://127.0.0.1:6379/1")
@celery_app.task
def send_sms(tid,mobile,datas):
'''发送短信异步任务'''
ccp=CCP()
ccp.send_message(tid,mobile,datas)
1.2 celey 호출
- 원래 호출 방법은 동기 전송이므로 로그 아웃하고 대신 셀러리를 호출해야합니다.
# lghome/api_1_0/verify_code.py
# # 发短信(同步发送)
# try:
# ccp = CCP()
# result = ccp.send_message(1,mobile_code, (sms_code, int(constants.SMS_CODE_REDIS_EXPIRES/60)))
# except Exception as e:
# logging.error(e)
# return jsonify(errno=RET.THIRDERR, errmsg='发送异常')
#
# # 返回值
# if result == 0:
# return jsonify(errno=RET.OK, errmsg='发送成功')
# else:
# return jsonify(errno=RET.THIRDERR, errmsg='发送失败')
# 发送短信(异步发送)
send_sms.delay(1, mobile_code, (sms_code, int(constants.SMS_CODE_REDIS_EXPIRES / 60)))
return jsonify(errno=RET.OK, errmsg='发送成功')
- SMS를 보내기 위해 호출 할 때 예외 캡처가 수행되지 않습니다.
1.3 서비스 시작 : 태스크 프로세서 작업자 시작
- 명령 줄에서 서비스를 시작합니다.
셀러리 -A lghome.tasks.task_sms 작업자 -l 정보
- windwos에서 다음 명령을 사용하십시오.
셀러리 -A lghome.tasks.task_sms 작업자 -l 정보 -P eventlet
- 그들 중 :
- -A는 해당 응용 프로그램을 나타내며 해당 매개 변수는 프로젝트에서 Celery 인스턴스의 위치입니다.
- 작업자는 여기서 시작될 작업자를 의미합니다.
- -l은 정보 수준과 같은 로그 수준을 나타냅니다.
1.4 검증 테스트
2. 셀러리 디렉토리 계층
- 위는 셀러리를 사용하여 관련 기능을 수행하지만 디렉토리는 계층화되어 있지 않습니다. 프로젝트가 점점 커짐에 따라 구조를 합리적으로 유지하고 기능 계획을 합리적으로 유지하기 위해 디렉토리를 계층화해야합니다.
- 태스크 패키지에 패키지 SMS를 빌드하여 SMS를 전송하십시오 (각 기능에 대해 하나의 패키지).
- 패키지 (sms)의 작업은 tasks.py라고해야합니다 (임의의 이름을 지정할 수 없습니다).
- 작업 패키지에 항목 파일 main.py 만들기
2.1 작업 정의
# lghome/tasks/sms/tasks.py
from lghome.tasks.main import celery_app
from lghome.libs.ronglianyun.ccp_SMS import CCP
@celery_app.task
def send_sms(tid, mobile, datas):
'''发送短信异步任务'''
ccp = CCP()
ccp.send_message(tid, mobile, datas)
2.2 엔트리 파일 정의
# lghome/tasks/main.py
from celery import Celery
# 创建celery对象
celery_app = Celery("home")
# 加载配置文件
celery_app.config_from_object("lghome.tasks.config")
# 注册任务
celery_app.autodiscover_tasks(["lghome.tasks.sms"])
2.3 구성 파일
# lghome/tasks/config.py
# broker_url
BROKER_URL="redis://127.0.0.1:6379/1"
#
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/2'
2.4 셀리에게 전화
# from lghome.tasks.task_sms import send_sms
from lghome.tasks.sms.tasks import send_sms
send_sms.delay(1, mobile_code, (sms_code, int(constants.SMS_CODE_REDIS_EXPIRES / 60)))
return jsonify(errno=RET.OK, errmsg='发送成功')
2.5 서비스 시작 : 태스크 프로세서 작업자 시작
- 명령 줄에서 서비스를 시작합니다.
셀러리 -A lghome.tasks.main worker -l info
- windwos에서 다음 명령을 사용하십시오.
셀러리 -A lghome.tasks.main worker -l info -P eventlet