Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在烧瓶中更快地发布方法和重定向_Python_Flask - Fatal编程技术网

Python 如何在烧瓶中更快地发布方法和重定向

Python 如何在烧瓶中更快地发布方法和重定向,python,flask,Python,Flask,我试着做一台微型服务器 @serv.route('/booking', methods=['POST']) def booking(): Do job A Do job B etc... return redirect('/direct_site') 如果作业A,作业B连接到谷歌API,我的服务器必须先做A,B,然后做重定向。 例如,如何使其更快 @serv.route('/booking', methods=['POST']) def booking():

我试着做一台微型服务器

@serv.route('/booking', methods=['POST'])
def booking():
    Do job A
    Do job B
    etc...
    return redirect('/direct_site')
如果作业A,作业B连接到谷歌API,我的服务器必须先做A,B,然后做重定向。 例如,如何使其更快

@serv.route('/booking', methods=['POST'])
def booking():
    redirect('/direct_site')
    
    
    return Do job A, do job C, etc..
两种选择:

首先重定向,然后执行作业

这里的主要问题是,一旦执行重定向,就会丢失 频道到用户。这意味着如果作业A或作业B有某种 如果你犯了错误,或者确实成功了,你将不再能够 直接向用户显示;相反,您需要跟踪它 如有必要,稍后将其显示给用户或 你自己作为网站管理员

考虑到这一点,新代码可能会如下所示:

@serv.route('/booking', methods=['POST'])
def booking():
    put job A on the queue
    put job B on the queue
    return redirect('/direct_site')
在其他地方,你会有一些东西处理队列,可能在内存、数据库或专用排队系统中,用户和/或你自己检查作业状态的其他页面,等等。它将不再是真正的微型

并行执行作业,然后重定向

这将简单得多,但重定向仍需要等待最长的作业完成。您将能够在重定向用户之前收集结果,这意味着您将能够直接报告任何错误,并且只有在作业实际上成功的情况下才能将用户重定向到成功页面

在并行线程、未来线程和异步线程中执行作业有很多种方法。您选择哪一个取决于您在代码的其他地方使用了什么和/或熟悉什么,以及在作业中完成了什么工作。如果它们主要是通过网络进行的API调用,而您的端很少进行处理,那么它们中的任何一个都可以完成这项工作。如果每个作业都是一个单独的API调用,那么未来将是最简单的;如果某些作业涉及相互依赖的多个API调用,那么线程将是最简单的


谢谢,工作给了我一个重定向的值,所以我试着换一份工作。先做作业A,重定向,做作业B,做作业C,做作业等…对,这基本上是第一个选择;首先执行作业A,然后将所有其他内容推送到一个队列上,该队列可能只是数据库中的bookings表,其中的字段指示仍要完成/重试/报告为成功或失败的作业。谢谢,我还有一个问题,在等待站点重新更正时,如果客户没有耐心,他们会重新加载浏览器,那么我的服务器将重新运行作业A?如何解决这个问题?这取决于一份工作是做什么的。你能不能让它变为幂等的,这样它就可以运行多次而不会造成任何伤害?作业A在Google日历中生成一个事件,并返回事件ID,link event。