Cherrypy_handling请求

时间:2017-09-27 15:06:48

标签: 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(cursor_factory = psycopg2.extras.RealDictCursor)
   params = cherrypy.request.json
   ...
   return some_dict

正如您所看到的,即可锁定线程以避免变量 params 上的竞争条件。但这真的有必要吗?我问这个问题是否像这样,POST上的所有其他请求都必须等待。没有锁定整个POST有没有更好的解决方案?我在代码中多次使用 params

1 个答案:

答案 0 :(得分:2)

首先澄清一点,CherryPy没有为每个请求创建一个新线程,它有一个预定的线程池(默认为10个),实际上一个线程可以用来处理一个请求

至于你是否应该锁定cherrypy.request.json。你真的没有,有一个名为"线程本地人"根据哪个线程正在访问此类对象,您可以在其上具有对不同对象的多个引用。 (python docs)。

说完了......你应该确保你编写的代码不会干扰其他线程的状态(你可以使用cherrypy.thread_data作为快速修复)。

看一下cherrypy插件架构,如果你想在线程之间共享一个资源,通常一个插件可以:http://docs.cherrypy.org/en/latest/extend.html#plugins