python 정시 임무를 실현하는 네 가지 방식

2731 단어 python정시 임무

Python으로 타이밍 퀘스트 수행하기


때때로 우리는 일정 시간마다 프로그램을 실행하거나 어떤 임무를 반복해서 수행해야 한다.예를 들어 블로거가 지난 글에서 말한 파충류처럼 어떤 목표에 대한 온라인 기어오르기를 실현하려면 실시간 임무도 필요하다.

Python으로 주어진 임무를 수행하는 네 가지 방법

  • while True: + sleep()
  • threading.타이머 타이머
  • 스케줄링 모듈 스케줄링
  • 퀘스트 프레임워크 APScheduler
  • 완료할 Task(간단한 정의)
    
    import datetime
    def Task():
      now = datetime.datetime.now()
      ts = now.strftime('%Y-%m-%d %H:%M:%S')
      print(ts)
    

    while True: + sleep () 를 사용하여 정시 작업 수행


    첫 번째로 생각한 것은 틀림없다. while:true+sleep 조합은 간단하고 난폭하다.
    
    def loopMonitor():
      while True:
        Task()
        # 3s 
        time.sleep(3)
    
    이런 방법의 단점은 동기화 작업만 실현할 수 있을 뿐 비동기화 작업을 수행할 수 없다는 것이다

    threading을 이용하다.Timer 타이머로 타이밍 작업 수행

    
    from threading import Timer
    def timerMonitor():
      Task()
      t = Timer(3, timerMonitor)
      t.start()
    
    문제가 발생한 것은 실행 횟수가 너무 많을 때 오류가 발생할 수 있다는 것입니다. Pyinstaller maximum recursion depth exceededed Error Resolution
    최대 귀속 깊이에 도달한 후에 생각나는 것은 최대 귀속 깊이를 수정하는 것이다
    
    sys.setrecursionlimit(100000000)
    
    그러나 최대 CPU까지 실행할 때,python은 프로그램을 직접 삭제합니다.

    스케줄링 모듈 schedule를 이용하여 정시 임무를 실현하다


    schedule는 제3자 경량급 작업 스케줄링 모듈로 초, 분, 시간, 날짜 또는 사용자 정의 이벤트 실행 시간에 따라
    여러 작업을 수행하려면 여러 task를 추가할 수 있습니다
    코드
    
    import schedule
    def scheduleMonitor():
      #  
      schedule.clear()
      #  3 
      schedule.every(3).seconds.do(Task)
      #  2 
      schedule.every(2).seconds.do(Task)
      while True:
        schedule.run_pending()
    
    그러나 그는 여전히 while Ture와 협조하여 사용해야 하며, 다른 몇 가지보다 CPU를 많이 차지한다.

    작업 프레임워크 APScheduler를 사용하여 정시 작업 수행


    APScheduler는 Python의 정시 작업 프레임워크로 주기 또는 정시 작업을 수행하는 데 사용됩니다. 이 프레임워크는 정시 작업을 추가, 삭제할 수 있을 뿐만 아니라 데이터베이스에 작업을 저장하여 작업의 지속화를 실현하여 사용하기에 매우 편리합니다.
    
    from apscheduler.schedulers.blocking import BlockingScheduler
    def APschedulerMonitor():
      #  :BlockingScheduler
      scheduler = BlockingScheduler()
      scheduler.add_job(Task, 'interval', seconds=3, id='test_job1')
      #  , 5S
      scheduler.add_job(Task, 'interval', seconds=5, id='test_job2')
      scheduler.start()
    

    총결산


    1: 순환+sleep 방식은 간단한 테스트에 사용할 수 있다.
    2:timer는 비동기적인 시간 작업을 실현할 수 있습니다.
    3:schedule는 정해진 시간에 실행할 수 있으나while Ture의 협조가 필요하고 메모리를 많이 차지합니다.
    4: APScheduler 프레임워크는 더욱 강력하고 그 안에 정점과 정시 임무를 직접 추가할 수 있어 흠잡을 데가 없다.
    그러니까 누구를 써도 내가 말하지 않겠지 QAQ
    이상은python이 정시 임무를 실현하는 네 가지 방식의 상세한 내용입니다. 더 많은python이 정시 임무를 실현하는 것에 관한 자료는 저희 다른 관련 글을 주목해 주십시오!

    좋은 웹페이지 즐겨찾기