2010-03-23 1 views
8

셀레리 작업 1 개와 작업자 5 명과 함께 표준 Django + Rabbitmq + Celery 설정이 있습니다.장고의 모든 셀러리 작업자/메모리 캐시에서 전역으로 액세스 할 수있는 객체

작업 업로드 (비트 단순화) 큰 파일 (~ 100MB)이 여러 원격 PC에 비동기 적으로 업로드됩니다.

모든 작업/작업자가 큰 파일을 메모리에 별도로로드하기 때문에 많은 양의 메모리를 사용하는 대신 모든 작업이 정상적으로 작동합니다.

내가하고 싶은 것은 일종의 캐시를 사용하여 모든 작업에 액세스 할 수 있도록하는 것입니다. 즉, 파일을 한 번만로드하십시오. locomem에 기반한 Django 캐싱은 완벽 할 것이지만 문서와 같이 : "각 프로세스는 자체적 인 캐시 인스턴스를 가질 것입니다."그리고이 캐시는 모든 작업자가 액세스 할 수 있어야합니다.

#2129820에 설명 된 셀러 리 신호로 시도했지만 그게 내가 필요한 것은 아닙니다.

그래서 질문은 : 셀러리에서 뭔가를 정의 할 수있는 방법이 있습니까 (예 : dict에 기반한 클래스와 같이 파일 또는 smth를로드 할 수있는 클래스와 같은). 아니면이 상황에서 사용할 수있는 장고 트릭이 있습니까?

감사합니다.

답변

1

당신이 필요로하는 것은 memcached가 장고를지지하는 것 같습니다. 그런 식으로 셀러리의 각 작업에 액세스 할 수 있습니다.

+0

필자는 memcached에 저장할 수있는 가장 큰 값은 1MB라고 생각했습니다. –

+0

왜 파일을 분할하지 않습니까? 모든 작업에이 파일의 모든 비트에 대한 액세스가 필요한 경우 매번 파일을로드하지 않아도됩니다. –

+0

글쎄, 나는 그것이 가능하기를 바라고있다. :). 파티셔닝은 복잡성을 증가시킬 것이며,이 문제를 해결할 수있는 간단한 방법이 있어야한다고 생각합니다. –

0

아마이 특정 작업을 위해 프로세스 대신 스레드를 사용할 수 있습니다. 스레드는 모두 동일한 메모리를 공유하기 때문에 메모리에 하나의 데이터 복사본 만 있으면되지만 여전히 병렬 실행됩니다. (이것은이 작업에 Celery를 사용하지 않는다는 의미입니다.)

2

전체 파일을 메모리에로드하는 대신 디스크에서 단순히 스트리밍하지 않는 이유는 무엇입니까?

+0

+1은 건전한 제안입니다. – knutin

관련 문제