在客户请求后运行方法

时间:2015-10-13 14:50:56

标签: python flask

为了最小化请求时间,我想在将200返回给客户端之后执行该方法。

@app.route('/register', methods=['POST'])
def register():
      #code and code
      return 200
      send_email_with_validation_url()

我该怎么办?有线程吗?

2 个答案:

答案 0 :(得分:5)

你可以使用线程来完成它,但如果没有一些控制权,最终可能会有很多线程扼杀资源。您也可能在没有意识到的情况下最终导致进程崩溃。

这是队列系统的工作。 Celery会很合适。有点像:

from celery import Celery

app = Celery('tasks', broker='amqp://guest@localhost//')

@app.task
send_email_job(address):
    send_email_with_validation_url()


@app.route('/register', methods=['POST'])
def register():
      #code and code
      send_email_job.delay(address)
      return 200

在这个例子中,send_email_job将被安排在后台运行(在不同的线程或进程中,甚至是机器,如果你需要),并使用给定的参数,你的服务器将立即返回。

答案 1 :(得分:0)

Celery很棒,但是如果任务不是很关键,那么asyncio将是一个不错的选择,请参阅this