これは非常に素朴な質問ですが、私はdjangoとpythonの非同期/バックグラウンドタスクに関する基本的なことを理解していないと感じています。並列プロセスを開始せずにDjangoでバックグラウンドプロセスを実行できますか?
djangoが実際に実行されたより60秒後にバックグラウンドタスクを実行するために、django-background-tasks(https://github.com/collinmutembei/django-background-tasks-example)が提供する簡単な例を複製しようとしています。しかし、私は同じことがセロリやヒューイのような他のバックグラウンドタスクマネージャーにも当てはまると思います。
例は非常に単純です - ユーザーがURLにアクセスするとすぐに、メッセージを印刷する単純な関数がmainジャンゴプロセス、60秒後
from background_task import background
from logging import getLogger
logger = getLogger(__name__)
@background(schedule=60)
def demo_task(message):
logger.debug('demo_task. message={0}'.format(message))
問題は私が本当に基本を理解していないということです。別の(または分離した)プロセスpython manage.py process_tasks
を開始しない限り、実行されません。バックグラウンドタスクを動作させるために私はいつもそれをしなければならないのですか、それとも並列プロセスを開始することなくそれを行う方法がありますか?
私は並列プロセスを開始する必要がある場合は、djangoコードの内側から行うことができます。ような何か:ジャンゴでの非同期タスクを実行
import subprocess
process = subprocess.Popen(['python', 'manage.py','process_tasks'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
ありがとう!私の質問は別のプロセス(セロリの場合は 'Celery -A celeryProj worker -l info'のような)が必要なのか、それとも私はdjangoプロジェクトの中から実行できますか? –
これはdjangoプロジェクトから実行する必要があります – AR7