Multithreading Cherrypy_处理请求

Multithreading Cherrypy_处理请求,multithreading,cherrypy,Multithreading,Cherrypy,我已经找了一段时间了,但找不到答案。 我知道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(curs

我已经找了一段时间了,但找不到答案。 我知道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上的争用条件。但这真的有必要吗?我在问,因为如果我这样做的话,所有其他的邮件请求将不得不等待。有没有更好的解决方案,而不锁定整个岗位?我在代码中多次使用了params

首先需要澄清的是,CherryPy并没有为每个请求创建一个新线程,它有一个预先确定的线程池(默认情况下为10个),实际上一次可以使用一个线程来处理单个请求

至于是否应该锁定
cherrypy.request.json
。你真的不知道,有一个叫做“线程局部变量”的概念,根据哪个线程访问不同的对象,你可以在这个概念上有多个对不同对象的引用。()

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


看看cherrypy插件体系结构,如果你想在线程之间共享资源,插件通常是一种方式:

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

至于是否应该锁定
cherrypy.request.json
。你真的不知道,有一个叫做“线程局部变量”的概念,根据哪个线程访问不同的对象,你可以在这个概念上有多个对不同对象的引用。()

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

查看cherrypy插件体系结构,如果您希望在线程之间共享资源,通常插件可以: