【发布时间】:2013-06-01 08:44:17
【问题描述】:
最近我一直在练习用flask建立一个网站。现在我遇到一个问题。
有一个功能可以实现注册。代码如下:
我的问题是:
在执行 sendmail() 时,它需要很多时间。所以用户必须等待片刻才能获得“一页”,大约4-5s。这会带来不好的体验。我知道使用线程可以让这两个功能相互独立,但是我学习编程的时间很短,所以我没有线程编程的经验,有人可以为我提供一些关于这个问题的想法或代码示例吗?
【问题讨论】:
最近我一直在练习用flask建立一个网站。现在我遇到一个问题。
有一个功能可以实现注册。代码如下:
我的问题是:
在执行 sendmail() 时,它需要很多时间。所以用户必须等待片刻才能获得“一页”,大约4-5s。这会带来不好的体验。我知道使用线程可以让这两个功能相互独立,但是我学习编程的时间很短,所以我没有线程编程的经验,有人可以为我提供一些关于这个问题的想法或代码示例吗?
【问题讨论】:
在 Python 中有多种实现线程的方法。 一个非常简单的解决方案是
import thread
def register():
...
some judgment
...
if true:
thread.start_new_thread(sendmail,())
return redirect(url_for('onepage'))
这将异步启动sendmail()。但是,如果sendmail 失败或返回某些内容,您将需要使用其他内容。
有很多关于python线程的教程,我觉得这个很好http://www.tutorialspoint.com/python/python_multithreading.htm
【讨论】:
threading 可能是比 Thread 更好的选择。
我没有线程解决方案:我正在使用 celery 进行硬操作:发送电子邮件、获取 url、创建许多数据库记录、周期性任务。
+你可以在不同的服务器上使用flask应用和celery实例
-你需要后端(rabbitmq、redis、mongodb等)
【讨论】:
celery 而不使用 flask-celery。