:예약 된 작업을 축적하여 작업자를 교착 상태로 만들 수 있습니까? 코드
@celery.task()
def some_recursive_task():
# Do some stuff and schedule it to run again later
# Note that the next run is not scheduled in a fixed basis, like crontabs
# but based on history of some object
# Actual task is found here:
# https://github.com/rafaelsierra/cheddar/blob/master/src/feeds/tasks.py#L39
# Then it call himself again
countdown = bla.get_countdown()
some_recursive_task.apply_async(countdown=countdown)
이 작업은 다음 십분 12 시간 withing에 실행되지만이 작업도 지금 실행해야 다른 작업을 호출 one for downloading 물건과 to parse it 다른.
문제는 주 기능이 데이터베이스의 모든 단일 레코드에 대해 호출된다는 것입니다. 몇백 개의 작업이 실행 중이라고 가정 해 봅시다. 그러나 이러한 작업이 몇 시간마다 평균적으로 실행되는 것을 고려하면 작업량은별로 중요하지 않습니다.
단일 작업자와 함께이 작업을 실행하려고하면 문제가 발생합니다. 작업자를 시작하면 모든 대기열을 실행하고 동시 작업자 8 명을 설정 한 다음 작업을 인식하기 시작합니다. 어느 정도 미래에 작업이 설정 되더라도 작업자는 작업을 가져 와서 예정된 실행을 기다릴 것이므로이 작업자는 그때까지 잠겨 있습니다.
두 개의 다른 기능을 다른 대기열로 분할 할 수 있다는 것을 알고 있습니다. 이미 수행 한 작업이지만 근무자가 12 시간 후에 작업을 인식하고 30 분 내에 실행해야하는 작업을 실행하지 않을 것이라는 우려가 있습니다.
작업자가 예정된 작업을 해당 시간까지 무시하고 시간없이 지연된 작업을 실행해야합니까?
나는 어떻게 생각하지 않거나, 모른다, periodic tasks 해결책이다.
내 작업 흐름을 변경하고 특정 대기열을 생성 했으므로 그 이후로 계속 실행 중입니다. 나는 eta == 카운트 다운에 대해 안다. 단지 카운트 다운을 사용한다. –