我是python的新手,目前正在研究其用作soap服务器的可行性。我目前有一个使用mysql阻塞api的非常粗糙的应用程序,但我想尝试一下扭曲的adbapi。我已经成功地在使用reactors的常规扭曲代码上使用了twisted adbapi,但似乎无法使用ZSI框架在下面的代码中使用它。它不会从mysql返回任何内容。有没有人在ZSI中使用过扭曲的adbapi?
import os
import sys
from dpac_server import *
from ZSI.twisted.wsgi import (SOAPApplication,
soapmethod,
SOAPHandlerChainFactory)
from twisted.enterprise import adbapi
import MySQLdb
def _soapmethod(op):
op_request = GED("http://www.example.org/dpac/", op).pyclass
op_response = GED("http://www.example.org/dpac/", op + "Response").pyclass
return soapmethod(op_request.typecode, op_response.typecode,operation=op, soapaction=op)
class DPACServer(SOAPApplication):
factory = SOAPHandlerChainFactory
@_soapmethod('GetIPOperation')
def soap_GetIPOperation(self, request, response, **kw):
dbpool = adbapi.ConnectionPool("MySQLdb", '127.0.0.1','def_user', 'def_pwd', 'def_db', cp_reconnect=True)
def _dbSPGeneric(txn, cmts):
txn.execute("call def_db.getip(%s)", (cmts, ))
return txn.fetchall()
def dbSPGeneric(cmts):
return dbpool.runInteraction(_dbSPGeneric, cmts)
def returnResults(results):
response.Result = results
def showError(msg):
response.Error = msg
response.Result = ""
response.Error = ""
d = dbSPGeneric(request.Cmts)
d.addCallbacks(returnResults, showError)
return request, response
def main():
from wsgiref.simple_server import make_server
from ZSI.twisted.wsgi import WSGIApplication
application = WSGIApplication()
httpd = make_server('127.0.0.1', 8080, application)
application['dpac'] = DPACServer()
print "listening..."
httpd.serve_forever()
if __name__ == '__main__':
main()发布于 2013-09-10 20:59:06
您发布的代码为每个(某种)请求创建了一个新的ConnectionPool,并且它从不停止池。这意味着您最终将耗尽资源,并且您将无法为更多的请求提供服务。“最终”可能是在一个或两个或三个请求之后。
如果您从未得到任何响应,这可能不是您遇到的问题。不过,在某一时刻,这将是一个问题。
仔细检查一下,我想知道这段代码是否运行过Twisted反应器。第一眼看的时候,我以为你在使用ZSI Twisted集成来运行你的服务器。现在我看到您使用的是wsgiref.simple_server。我有一定的信心,这是行不通的。
您已经在使用Twisted,而不是use Twisted's WSGI server。
除此之外,验证ZSI是否在正确的线程中执行回调。WSGI应用程序的缺省设置是在非reactor线程中运行。扭曲的API不是线程安全的,所以如果ZSI不采取一些措施来纠正这个问题,那么在线程中使用非线程安全的API就会引入错误。
https://stackoverflow.com/questions/18712318
复制相似问题