Nginx와 uWSGI가 설정되지 않았을 때 apscheduler를 이용해서 url.py에만 예약된 작업을 설정하고, pythonmanage.py를 이용해서 서버를 실행하면 정상적으로 실행되는데 uWSGI 설정이 완료되면, 입구가 Manage.py에서 uwsgi .py로 변경되어 url.py의 apscheduler 예약 작업은 사용자 액세스 후에만 로드되고, 동일한 예약 작업은 사용자 방문 횟수에 따라 반복적으로 시작됩니다.
방법 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))을 동시에 얻는 것이 가능할 수도 있는데, 이는 중복 문제를 완화할 수 있지만 완전히 해결할 수는 없습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!