2014-10-15 1 views
0

저는 셀러 리 + rabbitmq 앱에 큰 문제가 있습니다. 내 작업 대기 시간이 내 작업자가 작업을 수행하는 시간보다 오래 걸립니다. 얼마나 많은 기계가 스핀 업하든간에 대기 시간은 항상 내 작업 시간을 따라 잡을 것입니다.셀러리에서 태스크를 대기열에 두는 시간이 내 애플리케이션에서 .delay()를 병렬화하는 방법?

하나의 시스템에서 하나의 celery_client 스크립트가 모든 대기열 (task.delay() 호출)을 순차적으로 수행하기 때문입니다. S3에 저장된 파일 목록을 반복합니다. 큐잉 프로세스를 어떻게 병렬화 할 수 있습니까? 이 문제가 광범위한 기본 문제라고 생각하지만 해결책을 찾을 수 없습니다.

EDIT : 분명히하기 위해, 나는 task.delay()를 for 루프 안에 호출하여 S3 파일 목록 (반복적으로 작은 파일이 있음)을 반복합니다. 그 결과를 나에게 돌려 주어야 클라이언트에 반환 할 수 있습니다. 그래서 이런 이유로 결과의 완성 여부를 확인하기 위해 위의 결과 목록을 반복합니다. 결과 파일.

제가 생각할 수있는 몇 가지 해결책은 for 루프에서 멀티 스레드 지원을하는 것입니다. 그러나 .delay()가이 작업을 수행할지 여부는 확실하지 않습니다. 이 문제에 대한 셀러리 지원 기능이 내장되어 있습니까?

EDIT2 세부 정보 : 내 celeryconfig에서 하나의 대기열을 사용하고 있습니다. 내 작업은 모두 동일합니다.

EDIT3 : 여러 개의 작은 작업을 하나의 큰 작업으로 그룹화 할 수있는 "청킹"을 발견했습니다. 비록 이것이 많은 수의 작은 태스크를 작은 수의 큰 태스크로 변환 할 수 있지만 이것이 내 문제를 해결할 수 있는지 확실하지 않습니다. for for 루프는 여전히 순차적입니다. 나는 문서에서 많은 정보를 찾을 수 없었다.

+0

당신이 찾고있는 것이 그룹이라고 생각합니다. [이 답변] (https://stackoverflow.com/a/33259298/1150701)을보십시오 – xsdf

+0

[다음은 그룹에 관한 문서입니다] (https://celery.readthedocs.io/en/latest/getting-started /next-steps.html#groups) – xsdf

답변

0

작업 대기 시간이 작업보다 오래 걸리는 경우 작업 범위를 늘려 한 번에 N 개의 파일에서 작업 할 수는 있습니다. 따라서 1000 개의 파일에 대해 1000 개의 작업을 대기 행렬에 저장하는 대신. 한 번에 100 개의 파일에 대해 작동하는 10 개의 작업을 큐에 넣습니다.

작업을 입력 파일 대신 파일 목록으로 지정하십시오. 그런 다음 파일 목록을 반복 할 때마다 100 번 반복 할 수 있습니다.

관련 문제