1

django에서 n 초마다 작업을 실행하기 위해 asyncio를 사용하여 주 프로세스가 차단되지 않을 수도 있다고 생각합니까? 같은 콘솔에서 매 5 분을 인쇄하는 것, 예를 들어asyncio를 사용하여 django에서 주기적 작업 수행

뭔가 :

import asyncio 
    from random import randint 

    async def do_stuff(something, howmany): 
     for i in range(howmany): 
      print('We are doing {}'.format(something)) 
      await asyncio.sleep(randint(0, 5)) 

    if __name__ == '__main__': 
     loop = asyncio.get_event_loop() 
     work = [ 
      asyncio.ensure_future(do_stuff('something', 5)), 

     ] 
     loop.run_until_complete(asyncio.gather(*work)) 

이 장고 루프가 실행되는 동안 작동이 중지됩니다 것으로 보인다. 개발 중에도 작동하도록 만들 수 있다고해도, 사이트가 아파치 나 gunicorn과 같은 것으로 생방송으로 움직일 때 어떻게 동작할까요?

+0

아마도 다중 처리를 사용하는 것이 대안 일 수 있습니까? – Mikael

답변

4

많은 노력을 기울여이 작업을 수행하는 것이 가능할 수도 있지만. 훨씬 더 간단하게 cron 작업을 사용하는 시간을 존중하는 방법을 사용하는 것입니다. 이것을보십시오 : Using django for CLI tool

요즘 더 인기있는 접근 방식은 (어떤 속도로도 장고를하는 사람들 중에서) 셀러리를 사용하는 것입니다. 구체적으로 celery beat

셀러리 비트는 스케줄러입니다. 클러스터의 사용 가능한 작업자 노드에 의해 실행되는 일정한 간격으로 작업을 시작합니다 ( ).

관련 문제