> 운영 및 유지보수 > 엔진스 > Django+Nginx+uWSGI 예약 작업을 구현하는 방법

Django+Nginx+uWSGI 예약 작업을 구현하는 방법

WBOY
풀어 주다: 2023-05-15 11:34:06
앞으로
1504명이 탐색했습니다.

요약

Nginx와 uWSGI가 설정되지 않았을 때 apscheduler를 이용해서 url.py에만 예약된 작업을 설정하고, pythonmanage.py를 이용해서 서버를 실행하면 정상적으로 실행되는데 uWSGI 설정이 완료되면, 입구가 Manage.py에서 uwsgi .py로 변경되어 url.py의 apscheduler 예약 작업은 사용자 액세스 후에만 로드되고, 동일한 예약 작업은 사용자 방문 횟수에 따라 반복적으로 시작됩니다.

uWSGI의 cron 사용

방법 1: url.py의 apscheduler 예약 작업을 uwgsi.py로 마이그레이션

방법 2: uWSGI의 cron 사용

uWSGI의 cron 공식 웹사이트: https://uwsgi-docs-zh. /zh_CN/latest/Cron.html

end=1
while end:
    try:
        import uwsgi
        //建立job_id为0,每天12:12启动fuc的定时器,-1代表*(全部)
        uwsgi.register_signal(0, "", fuc)
        uwsgi.add_cron(0, 12,12,-1,-1,-1)
        end=0
    except:
        pass
로그인 후 복사

방법 1과 방법 2 모두 uwsgi.ini의 작업자=1을 설정해야 합니다

[uwsgi]
# 进程个数
workers=1
로그인 후 복사

소켓 바인딩 잠금 사용

uWSGI를 사용하는 Cron은 단일 프로세스 사용으로 제한됩니다. 프로세스로 인해 타이머가 반복적으로 시작되면 소켓.바인드 잠금을 사용하여 예약된 작업을 수정할 수 있습니다.

    try:
        import socket
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.bind(("127.0.0.1", 47200))
    except socket.error:
        logger.info('禁止成功')
    else:
        //定时任务方法
로그인 후 복사

sock.bind(("127.0.0.1", 47200))을 동시에 얻는 것이 가능할 수도 있는데, 이는 중복 문제를 완화할 수 있지만 완전히 해결할 수는 없습니다.

uWSGI의 mule 사용

1단계: 새 패키지 생성 및 __init__.py

//如果是Django项目,需要加上才可以使用django的model
//import django
//os.environ.setdefault('DJANGO_SETTINGS_MODULE', '项目名.settings')
//django.setup()

from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
//scheduler.add_job不详说,具体看官网文档
scheduler.add_job(...,timezone='Asia/Shanghai')
scheduler.start()
try:
    import uwsgi
    while True:
        sig = uwsgi.signal_wait()
except Exception as err:
    pass
로그인 후 복사
작성 2단계: uwsgi.ini 설정 및 mule 추가 = 패키지 패키지 이름/init.py

[uwsgi]
mule = package包名/__init__.py
로그인 후 복사

위 내용은 Django+Nginx+uWSGI 예약 작업을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿