【问题标题】:threading programming in pythonpython中的线程编程
【发布时间】:2013-06-01 08:44:17
【问题描述】:

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

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

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

【问题讨论】:

    标签: python flask


    【解决方案1】:

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

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

    之后:

    import threading
    

    【讨论】:

      【解决方案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

      【讨论】:

      • 感谢 elactic!对我来说真的很有用!
      • 不客气。但 Evpok 是对的,threading 可能是比 Thread 更好的选择。
      【解决方案3】:

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

      +你可以在不同的服务器上使用flask应用和celery实例

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

      【讨论】:

      • 好的。谢谢 tbicr。我来看看烧瓶芹菜。希望它可以帮助我。谢谢~
      • 从 celery 3.0 开始,您可以只使用 celery 而不使用 flask-celery
      猜你喜欢
      • 2018-11-07
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      相关资源
      最近更新 更多