我可以使用以下示例发出异步请求: http://twistedmatrix.com/documents/current/web/howto/client.html
我可以得到里面的异步响应接收的协议数据()但如何找出哪个响应映射到哪个请求?我想把我得到的回复映射回原来的主机:端口/请求。在
还有,像我现在这样使用global安全吗?在
class ClientResponseProtocol(Protocol):
def __init__(self, whenFinished):
self.whenFinished = whenFinished
def dataReceived(self, bytes):
global BUILD_REVISION
d = json.loads(bytes)
bv = d.get("build_revision")
if bv in BUILD_REVISION:
BUILD_REVISION[bv] += 1
else:
BUILD_REVISION[bv] = 1
def makeConnection(self, transport):
pass
def connectionLost(self, reason):
self.whenFinished.callback(None)
def handleResponse(r):
#print("version=%s\ncode=%s\nphrase='%s'" % (r.version, r.code, r.phrase))
#for k,v in r.headers.getAllRawHeaders():
# print(k, v)
finished = twisted.internet.defer.Deferred()
r.deliverBody(ClientResponseProtocol(finished))
return finished
def handleError(reason):
reason.printTraceback()
reactor.stop()
def getPage(url):
d = Agent(reactor).request('GET', url, Headers({'User-Agent': ['user']}), None)
d.addCallbacks(handleResponse, handleError)
return d
semaphore = twisted.internet.defer.DeferredSemaphore(BATCH_SIZE)
dl = list()
for server in servers:
dl.append(semaphore.run(getPage, 'http://%s/server_info.json' % server))
dl = twisted.internet.defer.DeferredList(dl)
dl.addCallbacks(lambda x: reactor.stop(), handleError)
reactor.run()
您可以向
Deferred
回调传递额外的参数:例如:
^{pr2}$或者循环:
另外,您可能还需要查看}的使用。在
twisted.web.client.Agent
,以取代对{Protocol.__init__()
中定义的所有属性都将是“连接范围”。在以下是api文档的一些链接,可能会有所帮助:
相关问题 更多 >
编程相关推荐