在客户请求后运行方法

urb*_*urb 1 python flask

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

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

我该怎么做?有线程吗?

Joe*_*Joe 5

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

这是队列系统的工作.芹菜将是一个很好的选择.有点像:

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
Run Code Online (Sandbox Code Playgroud)

在这个例子中,send_email_job将使用给定的参数在后台(在不同的线程或进程中,甚至是机器中)使用给定的参数进行调度,您的服务器将立即返回.

  • 它是asycnronous.它不会阻止.看看Celery文档. (3认同)