2009-11-03 5 views
2

웹 응용 프로그램에서 시간이 많이 걸리는 작업을 수행해야합니다. 작업량이 너무 많아 몇 분 동안 실행되지 않아 여러 스레드에서 실행해야하므로 사용자는 몇 분 동안로드 페이지를 볼 필요가 없습니다.Python의 멀티 스레드 큐

그래서 멀티 스레드 큐가 좋은 해결책이라고 생각했습니다. 큐에 추가하는 각 개체 인스턴스는 자체 스레드에서 실행해야합니다.

나는 어디서부터 시작 기본적인 생각이있어하지만 난 훨씬 더 나은 이미 작성된 솔루션 또는 뇌가 내기). 큐가 같이하는 방법을

내 솔루션 :

[ 
[ 
    obj_instance_1,[ 
        (function_1, function_args_1, priority_1), 
        (function_2, function_args_2, priority_2), 
       ] 
], 
[ 
    obj_instance_2,[ 
        (function_n, function_args_n, priority_n), 
       ] 
] 
] 
[] 목록입니다

및() 튜플이다.

+0

django-lineup (http://code.google.com/p/django-lineup/) – ohnoes

답변

2

스레딩을 확장하려면 요소 만 필요합니다. 스레드를 선택하고 조건()을 사용하여 producer,consumer 시스템을 구현하십시오.

나는 다른 코드가 풀에 스레드를 추가 할 수 있도록, 그것의 자신의 동시성 제어 및 추가() 메서드를 사용하여 스레드 풀을 유지하는 것입니다.

Here is the documentation for Python threading 다른 스레드 구현의 규칙을 따르는 것은 ... 무섭지 않습니다.

1

내가 파이썬에 대해 잘 모르는 것,하지만 당신은 스레드 풀 같은 소리를 설명하는지 -이

http://pypi.python.org/pypi/threadpool/

+0

+1이 프로젝트는 작업을위한 표준 대기열 모듈의 좋은 사용을 보여줍니다. –

2

kamaelia가 스레드 동시성을 추출하기위한 도구를 제공합니다 빠른 구글에서입니다 또는 프로세스 등

+1

왜 재창조 Kamaelia가 이미 테스트 된 프레임 워크를 제공 할 때 바퀴. –

6

파이썬 표준 라이브러리 Queue 모듈은 이미 스레드 안전성을 알고 있으므로 사용자 요구 사항에 맞아야합니다.

다음은 작업 대기열에 대기열을 사용하는 방법을 설명하는 멋진 용지 Task Queue Implementation Pattern입니다.

+0

+1, 좋은 답변입니다. 나는 큐 자신을 더 보게 될 것이다. C 배경에서 왔을 때, 당신은 단지 다시 구현하는 경향이있다 : P –

0

beanstalkd 또는 gearman을 확인하시기 바랍니다.

웹 서버를 웹 서버로 만들고 대기열을 통해 외부 작업자로 이동하여 장기 실행 작업을 독립적으로 안전하게 수행 할 수 있습니다.

0

멀티 스레딩 라이브러리에서 process pools을 사용하는 것이 좋습니다. 이것은 빌트인 라이브러리이며 어쨌든 필요로하는 대부분의 구현을 추상화합니다. 특히 풀이 목록에서 작동하고 데이터가 이미 목록 형식이기 때문에 필요합니다. 풀의 map_async 멤버 함수와 함께 사용하고 특정 작업을 완료 할 때마다 콜백을 할당하여 사용자에게 알릴 수 있습니다.