python - 在运行其余方法时在 celery 中发送电子邮件
问题描述
我试图通过 celery 完成发送电子邮件部分来更快地向页面发出我的请求,这样该方法的其余部分就可以运行并完成,而无需等待发送电子邮件。
我以前尝试过使用异步并打过芹菜电话,但我不熟练,需要那个部门的一些帮助
def checkout():
if request.method == 'POST':
username = User.get_username(session['email'])
#todo: do the next line in celery
send_email(username, session['email_to'])
session['email_to'] = None
flash('Youre request has been sent')
return redirect(url_for('home'))
return render_template('transaction/checkout.html')
发送电子邮件.py
def send_email(username_from, email):
from_email = os.get('email')
from_password = 'rnmmhgtlcaqsxows'
to_email = os.get('email')
subject = f'New Request from {username_from}'
message = f"You have a request from {username_from}"
msg = MIMEText(message, 'html')
msg['subject'] = subject
msg['To'] = to_email
msg['From'] = from_email
gmail = smtplib.SMTP('smtp.gmail.com',587)
gmail.ehlo()
gmail.starttls()
gmail.login(from_email, from_password)
gmail.send_message(msg)
解决方案
Imaginesend_email
是一个 Celery 任务。- 有就足够了
send_email.apply_async()
在您的代码中将该任务放在默认的 Celery 队列中,它将由 Celery 选择并执行,而其余代码继续工作。
推荐阅读
- java - RecyclerView 内的 RecyclerView 滑动以删除子级
- symfony - Symfony 主义日期无限
- c++ - 我可以使用 std::optional 进行错误处理吗?
- ios - 用于清除密码字段的文本字段 shouldChangeCharactersIn
- python - 从 Pandas 数据框读取
- java - 有没有办法在 Java RabbitMQ 中动态创建 @RabbitListner
- java - 调整相同尺寸的窗口大小(16:9)JAVA JFrame
- c# - C# LINQ - 将行拆分为两行
- javascript - 对 Datepicker 进行限制的忍者形式
- css - 如何将下拉菜单放在导航栏中?