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
我已经搜索了一段时间,但找不到答案。 我知道 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