5 분마다 실행해야하는 장시간 실행 프로세스가 있지만 프로세스의 둘 이상의 인스턴스가 동시에 실행되어서는 안됩니다. 프로세스는 일반적으로 5 분이 지나면 실행되지 않아야하지만 두 번째 인스턴스가 실행되는 경우 두 번째 인스턴스가 시작되지 않도록해야합니다.Django Celery : 장시간 실행되는 프로세스의 인스턴스 하나만 실행하십시오.
previous recommendation에 따르면 장거리 셀러 리를 사용하여 장기 실행 작업을 예약하고 있습니다.
정기적 인 작업이 작동하지 않는다고 생각합니다. 5 분이 지났을 때 다른 작업 인스턴스가 이미 실행중인 경우 두 번째 작업을 실행하지 않으려 고합니다.
현재 실험은 다음과 같습니다. 8시 55 분에 작업 인스턴스가 실행되기 시작합니다. 작업이 끝나면 다음 5 분 표시에서 다른 인스턴스가 실행됩니다. 따라서 첫 번째 작업이 8:57에 끝나면 두 번째 작업은 9:00에 실행됩니다. 첫 번째 작업이 오래 실행되고 9:01에 끝나면 다음 인스턴스가 9:05에 실행되도록 예약합니다.
저는 아래의 간단한 예제보다 더 많은 것을 수행 할 때 다양한 암호를 사용하는 데 어려움을 겪었으므로 이전 인스턴스에서 작업을 예약하는 사람들의 다른 예는 찾지 못했습니다. 내가하려고하는 일을하는 데 더 나은 접근법이 있는지 궁금합니다. 나는 일의 이름을 짓는 방법이 있다는 것을 알고있다. 같은 이름의 실행중인 인스턴스 또는 예약 된 인스턴스를 검색하는 방법이 있습니까? 누구나 5 분마다 작업을 실행하는 것과 관련하여 조언을 제공하지만 한 번에 하나의 작업 만 실행하도록 보장합니까?
는 인 MyModule/tasks.py에서 조감사하십시오 ./manage.py 쉘에서
import datetime
from celery.decorators import task
@task
def test(run_periodically, frequency):
run_long_process()
now = datetime.datetime.now()
# Run this task every x minutes, where x is an integer specified by frequency
eta = (
now - datetime.timedelta(
minutes = now.minute % frequency , seconds = now.second,
microseconds = now.microsecond)) + datetime.timedelta(minutes=frequency)
task = test.apply_async(args=[run_periodically, frequency,], eta=eta)
:
from mymodule import tasks
result = tasks.test.apply_async(args=[True, 5])
감사합니다. 0x00mh. 그것은 깔끔한 링크입니다. 나는 그것을 시험해보고있다. –