Flask 프로젝트 1 실제 전투 : 2.5 셀러리 도입 및 사용 (개선 예정)

여기에 사진 설명 삽입

(선생님 생방송 내용에 따름)
  • 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
여기에 사진 설명 삽입

2.6 검증 테스트

여기에 사진 설명 삽입

추천

출처blog.csdn.net/laoluobo76/article/details/110519866