일부 정리를 수행하기 위해 X분/초마다 함수를 실행해야 하는 경우 일부 작업을 트리거하면 스레딩 모듈 및 django 사용자 정의 CLI를 사용하여 간단한 스케줄러를 수행할 수 있습니다. 명령.
외부 API에 무언가를 게시하기 위해 5초마다 함수를 호출하고 싶다고 가정해 보겠습니다.
django 앱에서 해당 폴더 안에 관리라는 폴더/패키지를 만들고 명령이라는 이름의 다른 폴더를 만듭니다. 명령 폴더에 runposter.py라는 모듈을 만듭니다. 결국에는 다음과 같은 구조를 가지게 됩니다. yourapp/management/commands/runposter.py.
이 코드에서는 5초마다 중지되지 않는 한 while 루프를 실행하는 스레드를 사용합니다. print("posting")을 실행하려는 함수/논리로 바꾸세요.
# runposter.py import time from threading import Thread, Event from django.conf import settings from django.core.management.base import BaseCommand stop_event = Event() def my_job(): while not stop_event.is_set(): try: print("posting") time.sleep(5) except KeyboardInterrupt: break class Command(BaseCommand): help = "Run Poster." def handle(self, *args, **options): poster = Thread(target=my_job) try: print("Starting poster...") poster.start() while poster.is_alive(): poster.join(timeout=1) except KeyboardInterrupt: print("Stopping poster...") stop_event.set() poster.join() print("Poster shut down successfully!")
좋습니다. 이제 다른 터미널 창을 열고 python prepare.py runposter를 실행하세요. 보시다시피 명령 runposter는 우리가 지정한 모듈 이름으로 생성되었습니다.
물론 더 복잡한 작업에는 rq-scheduler나 celery periodic task 또는 django-q를 사용하는 것이 좋습니다.
그러나 간단한 경우에는 이것으로 충분합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3