我试图将一个简单的同步服务器转换为异步版本,服务器收到post requestes并从外部web服务(亚马逊sqs)获取响应。这里的syncronous代码在Tornado web服务器中正确使用协程
def post(self):
zoom_level = self.get_argument('zoom_level')
neLat = self.get_argument('neLat')
neLon = self.get_argument('neLon')
swLat = self.get_argument('swLat')
swLon = self.get_argument('swLon')
data = self._create_request_message(zoom_level, neLat, neLon, swLat, swLon)
self._send_parking_spots_request(data)
#....other stuff
def _send_parking_spots_request(self, data):
msg = Message()
msg.set_body(json.dumps(data))
self._sqs_send_queue.write(msg)
阅读旋风文档和这里的一些线程我使用协同程序使用此代码结束:
def post(self):
zoom_level = self.get_argument('zoom_level')
neLat = self.get_argument('neLat')
neLon = self.get_argument('neLon')
swLat = self.get_argument('swLat')
swLon = self.get_argument('swLon')
data = self._create_request_message(zoom_level, neLat, neLon, swLat, swLon)
self._send_parking_spots_request(data)
self.finish()
@gen.coroutine
def _send_parking_spots_request(self, data):
msg = Message()
msg.set_body(json.dumps(data))
yield gen.Task(write_msg, self._sqs_send_queue, msg)
def write_msg(queue, msg, callback=None):
queue.write(msg)
使用攻城相比演出我得到的第二个版本是比原来更差一个,所以可能有一些关于协程和Torndado异步编程的东西,我根本不懂。 你能帮我解决这个问题吗?
编辑:self._sqs_send_queue
它是从伯特接口和queue.write(msg)
检索队列对象返回已写入队列
什么'_sqs_send_queue'在你的榜样?直到从亚马逊检索到响应之后,该调用才会返回吗? – dano 2014-10-16 17:37:10