Cherrypy_handling 个请求

Cherrypy_handling requests

我已经搜索了一段时间,但找不到答案。 我知道 cherrypy 创建了一个新线程来处理请求(GET、PUT、POST、DELETE 等)。

现在我像这样获取参数:

...
@cherrypy.tools.json_in()
@cherrypy.tools.json_out()
def POST(self):
   Forum.lock_post.acquire()
   conn = self.io.psqlConnect(self.dict_psql)
   cur = conn.cursor(cursor_factory = psycopg2.extras.RealDictCursor)
   params = cherrypy.request.json
   ...
   return some_dict

如您所见,我锁定了线程以避免变量 params 出现竞争条件。但这真的有必要吗?我在问 cos,如果我这样做,POST 上的所有其他请求都必须等待。有没有不锁整个POST更好的解决办法?我在代码中多次使用 params

首先澄清一下,CherryPy 不会为每个请求创建一个新线程,它有一个预先确定的线程池(默认为 10 个),确实可以从中使用一个线程一次处理一个请求.

至于要不要锁cherrypy.request.json。你真的不知道,有一个叫做 "thread locals" 的概念,你可以根据哪个线程正在访问这样的对象,对不同的对象有多个引用。 (python docs).

话虽如此...您应该确保您编写的代码不会干扰其他线程的状态(您可以使用 cherrypy.thread_data 作为快速修复)。

看看 cherrypy 插件架构,如果你想在线程之间共享资源,通常插件是这样的:http://docs.cherrypy.org/en/latest/extend.html#plugins