简而言之,我不明白 CherryPy 同时向同一资源获取两个请求会发生什么,是变量混合还是发生了什么?
我有这个问题,我正在尝试使用 Python 2.7 和 CherryPy 3.2.2 创建一个非常基本的 Web 服务。
Web 服务由前端使用,它使用 jquery/ajax 向 Web 服务发出 ajax 请求。
现在,我创建了一个 CherryPy 程序,并且正在使用它的内置 wsgi 服务器。我有这样的 CherryPy 配置:
conf = {
'global': {
'server.socket_host': '127.0.0.1',
'server.socket_port': 8000,
},
'/': {
'request.dispatch': cherrypy.dispatch.MethodDispatcher(),
}
}
cherrypy.quickstart(root, '/', conf)
然后我有:
root.customers = getCustomers()
和这个的实际类:
class getCustomers(object):
def __init__(self):
pass
exposed = True
def GET(self,callback,**kwargs):
self.callback = callback
self.cnxn= pyodbc.connect(constr)
self.cursor = self.cnxn.cursor()
cherrypy.response.headers['Content-Type']='application/json'
self.cursor.execute("""select * from customers
""", self.job_worknumber)
self.customers = self.cursor.fetchall()
self.objects_list = []
for c in self.customers
r = collections.OrderedDict()
r['customer_id'] = c.customer_id
r['customer_name'] = c.customer_name
self.objects_list.append(r)
self.cursor.close()
self.cnxn.close()
self.w = collections.OrderedDict()
self.w['data1'] = self.objects_list
#w['errors'] = 'error'
self.j = json.dumps(self.w)
#cursor2.close()
return self.callback+'('+self.j+');'
现在,当我创建一个 GET 请求时,我得到了我想要的,但是如果我创建在页面加载时向 Web 服务发送两个 GET 请求的网页,第二个请求几乎总是会失败,并出现如下错误:
ProgrammingError: Attempt to use a closed cursor.
或其他时间:
ProgrammingError: No results. Previous SQL was not a query
那么发生了什么,我的请求是否在同时运行时共享相同的变量?我可以将 CherryPy 配置为一次只处理一个请求吗?