2015-01-28 2 views
0

Я пытаюсь решить проблему с отправкой писем (или любой длинной задачи) в проекте web.py. Я хочу, чтобы начать отправку почты и вернуть ответ http. Но эта задача (отправка) занимает много времени. Есть ли решение?Отправлять письма async в 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

Спасибо, я посмотрю. Теперь я читаю модуль потоковой передачи, и кажется, что все в порядке. Я сделаю сравнение конечно. –

Смежные вопросы