2017-05-08 14 views
1

asyncioを使用してdjangoでn秒ごとにタスクを実行すると、メインプロセスはブロックされません。 Djangoはループの実行中に作業を停止することを思わ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)) 

:のように、コンソールに5分ごとに印刷し例えば

何か。これが開発の際に働くことができたとしても、サイトがapacheやgunicornのようなもので生きていくとどうなるでしょうか?

+0

代わりにマルチプロセッシングを使用することはできますか? – Mikael

答えて

4

これを達成するには多大な労力が必要ですが、もっと簡単なことは、cronジョブを使って時間を守って練習することです。これを参照してください:Using django for CLI tool

今日、もっと普及したアプローチ(どんな速度でも、django開発者の間で)セロリを使用することです。特にcelery beat

セロリビートはスケジューラです。定期的な間隔でタスクを開始します。 は、クラスタ内の使用可能なワーカーノードによって実行されます。

関連する問題