gpt4 book ai didi

python - 编写要导入的轻量级客户端函数的好方法 Twisted Python

转载 作者:太空宇宙 更新时间:2023-11-04 06:31:46 25 4
gpt4 key购买 nike

我正在运行以下服务器:

class ThasherProtocol(basic.LineReceiver):
def lineReceived(self, line):
dic = simplejson.loads( line)
ret = self.factory.d[ dic['method'] ]( dic['args'] )
self.transport.write( simplejson.dumps( ret) )
self.transport.loseConnection()



class ThasherFactory(ServerFactory):
protocol = ThasherProtocol

def __init__(self):
self.thasher = Thasher()
self.d= {
'getHash': self.thasher.getHash,
'sellHash' : self.thasher.sellHash
}


reactor.listenUNIX( c.LOCATION_THASHER, ThasherFactory() )
reactor.run()

我有多个文件从特定文件导入一个名为“getHash”的特殊函数。请注意,getHash 的参数只是一个文本(字符串)字典。我如何编写一个简单的客户端函数 (getHash):

from particular file import getHash
i = getHash( { 'type':'url', 'url':'http://www.stackoverflow.com' } )

请注意,我只想做的是:1) 将字典转储到 json 中,2)将该json转储到特定的套接字中,3) 等待它返回并解压 json

最佳答案

您希望 getHash 返回一个 Deferred,而不是一个同步值。

这样做的方法是创建一个 Deferred 并将其与执行特定请求的连接相关联。

以下是未经测试的,可能不会工作,但它应该给你一个大概的想法:

import simplejson
from twisted.python.protocol import ClientFactory
from twisted.internet.defer import Deferred
from twisted.internet import reactor
from twisted.protocols.basic import LineReceiver

class BufferingJSONRequest(LineReceiver):
buf = ''

def connectionMade(self):
self.sendLine(simplejson.dumps(self.factory.params))

def dataReceived(self, data):
self.buf += data

def connectionLost(self, reason):
deferred = self.factory.deferred
try:
result = simplejson.load(self.buf)
except:
deferred.errback()
else:
deferred.callback(result)

class BufferingRequestFactory(ClientFactory):
protocol = BufferingJSONRequest

def __init__(self, params, deferred):
self.params = params
self.deferred = deferred

def clientConnectionFailed(self, connector, reason):
self.deferred.errback(reason)

def getHash(params):
result = Deferred()
reactor.connectUNIX(LOCATION_THASHER,
BufferingRequestFactory(params, result))
return result

现在,为了使用这个函数,您已经需要熟悉 Deferreds,并且您需要编写一个回调函数以在结果最终到达时运行。但对这些的解释属于一个单独的问题;)。

关于python - 编写要导入的轻量级客户端函数的好方法 Twisted Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1404066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com