2

最近一直在练习用flask建一个网站。现在我遇到一个问题。
有一个功能可以实现注册。像这样的代码:

    定义寄存器():
        ...
        一些判断
        ...
        如果真实:
        发邮件()
        返回重定向(url_for('onepage'))

我的问题是:
在执行 sendmail() 时,它需要很多时间。所以用户必须等待片刻才能获得“一页”,大约4-5s。这会带来不好的体验。我知道使用线程可以让这两个功能相互独立,但是我学习编程的时间很短,所以我没有线程编程的经验,有人可以为我提供一些关于这个问题的想法或代码示例吗?

4

3 回答 3

5

您想要的是threading而不是低级(在 Python 3thread中已重命名为)。_thread对于这种简单的情况,不需要子类化threading.Thread,因此您可以替换sendmail()为:

threading.Thread(target=sendmail).start()

后:

import threading
于 2013-06-01T09:50:39.030 回答
2

在 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

于 2013-06-01T09:42:23.580 回答
1

我没有线程解决方案:我正在使用 celery 进行硬操作:发送电子邮件、获取 url、创建许多数据库记录、定期任务。

+您可以在不同的服务器上使用烧瓶应用程序和 celery 实例

-你需要后端(rabbitmq、redis、mongodb 等)

于 2013-06-03T06:48:52.097 回答