为了最小化请求时间,我想在将200返回给客户端之后执行该方法。
@app.route('/register', methods=['POST'])
def register():
#code and code
return 200
send_email_with_validation_url()
我该怎么办?有线程吗?
答案 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