tornado AsyncHTTPClient动态添加http_客户端.fetch至lis

2024-10-03 11:16:28 发布

您现在位置:Python中文网/ 问答频道 /正文

这是密码

class GetdataHandler(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    @tornado.gen.engine
    def get(self):
        http_client = tornado.httpclient.AsyncHTTPClient()
        response1, response2, response3, response4, response5, response6, response7, response8, response9, response10 = yield [
        http_client.fetch('http://u.com/order/fa-huo?id=85223'),
        http_client.fetch('http://u.com/order/fa-huo?id=85224'),
        http_client.fetch('http://u.com/order/fa-huo?id=85225'),
        http_client.fetch('http://u.com/order/fa-huo?id=85226'),
        http_client.fetch('http://u.com/order/fa-huo?id=85227'),
        http_client.fetch('http://u.com/order/fa-huo?id=85228'),
        http_client.fetch('http://u.com/order/fa-huo?id=85229'),
        http_client.fetch('http://u.com/order/fa-huo?id=85230'),
        http_client.fetch('http://u.com/order/fa-huo?id=85231'),
        http_client.fetch('http://u.com/order/fa-huo?id=85232')]
        self.write('getData: %s  getData: %s  getData: %s  getData: %s  getData: %s  getData: %s  getData: %s  getData: %s  getData: %s  getData: %s'%(response1.body,response2.body,response3.body,response4.body,response5.body,response6.body,response7.body,response8.body,response9.body,response10.body))

        self.finish()

这是个愚蠢的方法。 我会从mysql获取ID。我不知道需要请求多少ID。 我不知道怎样用a(for)做这件事。 如有任何建议,我将不胜感激。你知道吗


Tags: selfcomclientwebidhttporderbody
1条回答
网友
1楼 · 发布于 2024-10-03 11:16:28

使用simple`for,将需要其他列表

ids = [111,222,333,444]
futures = []
for iid in ids:
    futures.append(http_client.fetch(url + iid)
responses = yield futures

# prepare output to user
bodies = []
for r in responses:
    bodies.append(r.body)

# join list of response bodies 
output = ' '.join(bodies) 
self.write(output)

或者可以使用list comprehension

class GetdataHandler(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    @tornado.gen.engine
    def get(self):
        http_client = tornado.httpclient.AsyncHTTPClient()
        url = 'http://u.com/order/fa-huo?id={}'

        ids = [111,222,333,444]  
        # from GET/POST params 
        # ids = self.get_arguments('ids')

        responses = yield [
            http_client.fetch(url.format(iid)) for iid in ids
        ]

        output = ' '.join(
            ['getData: {}'.format(r.body) for r in responses]
        )
        self.write(output)   
        self.finish()

但请注意,缺少错误处理。例如,如果其中一个fetch引发异常,您将不会得到任何结果,您应该在某个函数中包装错误处理(可能使用^{} argument in ^{})。你知道吗

更多信息:

相关问题 更多 >