我有一个python线程烧瓶Web服务器,它在收到的每个请求上执行昂贵的任务。例如
1) CLIENT --> REQUEST1 --> SERVER
2) Server performing expensive task for request1...
3) CLIENT --> REQUEST2 --> SERVER
4) Server Performing expensive tasks for request1 and request2 in parallel...
5) Server sends complete response for request1 (or request2)
6) Server sends complete response for request2 (or request1)
如果第二个请求到达,我希望服务器停止为request1执行其任务。这就是我希望服务器的行为:
1) CLIENT --> REQUEST1 --> SERVER
2) Server performing expensive tasks for request1...
3) CLIENT --> REQUEST2 --> SERVER
4) Server immediately sends (incomplete) response for request1
5) Server performing expensive tasks for request2...
6) Server sends complete response for request2
我如何在request2 worker中获取对request1 worker的引用,以便向其发送停止消息?是否可以在flask中实现此目的(或在必要时利用某些实用程序库)?
这不是答案,但是我无法在评论中足够清楚地解释我的想法。
有一个不太好的解决方案。假设您有在请求到达服务器时执行的代码。
def funcReq()
但是,您可以做的是创建一个新线程,然后执行funcReq()
,这样您就可以拥有一个变量,该变量持有您希望暂停的线程。您可以将其存储在某个位置(Flask有一个全局对象,该对象会传递给我相信的每个请求),所有请求都可以到达该位置。现在,您可以控制Request 1
从执行的线程Request 2
。
该解决方案的问题在于,最终您将创建并运行两倍多的线程。这很丑。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句