2013-09-24 4 views
3

돌아 가기까지 오랜 시간이 걸리는 기능 (예 : sync_files())이있는 장고 웹 앱을 만들고 있습니다. gevent를 사용하면 sync_file()이 실행될 때 내 앱이 차단되지 않고 다른 클라이언트가 webapp에 연결하여 상호 작용할 수 있습니다.gevent를 사용할 때 셀러리가 필요합니까?

내 목표는 웹 클라이언트가 다른 클라이언트에 응답하고 차단하지 않도록하는 것입니다. 나는 수십 명의 사용자가 내 webapp (아마 최대 20 개의 연결)에 연결할 것을 기대하지 않으며, 이것을 다음 트위터가되도록 설정하고 싶지는 않습니다. 내 응용 프로그램은 vps에서 실행되므로 가벼운 무게가 필요합니다.

위의 목록에 나와있는 경우 gevent를 사용할 때 샐러리를 사용하는 것이 중복됩니까? 셀러리를 사용하는 데 특별한 이점이 있습니까? 셀러 리가 내 컴퓨터에서 실행될 다른 서비스이기 때문에 셀러리를 사용하지 않는 것이 좋습니다.

편집 : 셀러리가 gevent에서 작업자 풀을 실행할 수 있음을 알았습니다. 나는 내가 gevent (gevent)와 셀러리 사이의 관계에 대해 더 확신하지 못한다고 생각한다.

답변

3

즉, 셀러리가 필요합니다.

gevent를 사용하고 동시성이 있더라도 문제는 요청 시간 초과가됩니다. 작업을 실행하는 데 10 분이 걸리지 만 일반적인 요청 시간 제한은 약 1 분 정도 소요됩니다. 따라서 뷰에서 직접 작업을 실행하면 서버가 처리를 시작하지만 클라이언트 (브라우저)가 서버가 오프라인이라고 생각하기 때문에 연결을 끊을 가능성이 높습니다. 따라서 연결이 끊어 질 때 어떤 일이 발생하는지 보장 할 수 없기 때문에 데이터가 손상 될 수 있습니다. Celery는보기와 독립적으로 작업을 처리 할 백그라운드 프로세스를 트리거하기 때문에이 문제를 해결합니다. 따라서 사용자는 즉시보기 응답을 받게되며 동시에 서버는 작업 처리를 시작합니다. 이는 많은 처리가 필요한 시나리오를 처리하기위한 올바른 패턴입니다.

+0

답장을 보내 주셔서 감사합니다 - 저는 현재 큐잉을 위해 python-rq.org의 RQ를 사용하고 있습니다 ... 셀러리와 RQ가 유사한 기능을 수행한다고 생각하면 (건축상의 차이점없이)? 내 질문에 RQ에 대한 메모를 추가해야합니다. - 죄송합니다. – Trewq

+2

예. 그들은 가설 적으로 동일하거나 유사한 것을한다. – miki725

관련 문제