在python中进行线程编程

时间:2013-06-01 08:44:18

标签: python flask

最近我一直在练习用烧瓶建立一个网站。现在我遇到了一个问题。
有一个功能可以实现注册。代码如下:

    def register():
        ...
        some judgment
        ...
        if true:
        sendmail()
        return redirect(url_for('onepage'))

我的问题是:
在执行sendmail()时,需要很多时间。所以用户必须等待片刻才能得到“onepage”,大约4-5秒。这将带来糟糕的体验。我知道使用线程可以让这两个函数相互独立,但是我已经学习了很短的编程时间,所以我没有线程编程的经验,在这个问题上有没有人能为我提供一些想法或代码示例?

3 个答案:

答案 0 :(得分:4)

你想要的是threading而不是低级thread。对于这种简单的情况,不需要子类化threading.Thread,因此您可以通过

重新替换sendmail()
threading.Thread(target=sendmail).start()

之后

import threading

答案 1 :(得分:1)

在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

答案 2 :(得分:1)

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

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

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