2015-01-28 5 views
0

나는 web.py 프로젝트에서 메일 (또는 긴 작업)을 보낼 때 문제를 해결하려고한다. 내가 원하는 것은 메일을 보내고 HTTP 응답을 반환하는 것입니다. 그러나이 작업 (보내기)은 오랜 시간이 걸립니다. 어떤 해결책이 있습니까?메일 보내기 async in web.py

예 :

import web 
''some settings urls, etc.'' 

class Index: 
    def GET(self): 
     ''task'' 
     sending_mail() 
     return 'response' 

나는 비동기 작업에 대한 많은 예제를 발견하지만이 작업은 배경과 반환 '응답'에 넣을 경우 실패 할 것이라고 생각합니다.

답변

2

당신은 (당신이 이메일을 보낼 필요로 할 때 당신이 하나를 생성 할 수 있습니다) 별도의 스레드에서 이메일을 보내는 멀리 얻을 수 :

import threading 
threading.Thread(target=sending_email).start() 

그러나, 만능 최고 (표준) 솔루션이 될 것입니다 Celery과 같은 비동기 태스크 프로세서를 사용하십시오. 웹 스레드에서 단순히 새 작업을 만들고 Celery는 비동기 적으로 실행합니다.


응답 이메일에 의존하지 않는 메시지 큐를 사용하는 경우 실패 "응답을 반환", 응답을 전송하기 전에 전송되는 이유는 없습니다 (하지만이 경우에, 당신은 건축 문제가있다) .

+0

내 대답은이 작업과 관련이 없습니다. 좋습니다. 실마리를 가져 주셔서 감사합니다. –

0

sending_email() 작업을 백그라운드 큐로 이동하는 것이 가장 좋은 방법입니다. 이렇게하면 응답을 즉시 반환하고 나중에 sending_email 작업의 결과를 얻을 수 있습니다.

좀 더 살펴 보도록하겠습니다. RQ 가벼운 셀러리 대신 사용할 수있는 대안입니다. 나는 백그라운드에서 이메일을 보내기 위해 과거에 그것을 사용했고 실망시키지 않았다.

+0

감사합니다. 나는 그것을 살펴볼 것입니다. 이제 모듈 스레딩을 읽고 괜찮을 것 같습니다. 나는 확실히 비교할 것이다. –