我当前的代码打印出一个空列表,如何在继续代码流之前等待所有请求和回调完成?
from requests_futures.sessions import FuturesSession
from time import sleep
session = FuturesSession(max_workers=100)
i = 1884001540 - 100
list = []
def testas(session, resp):
print(resp)
resp = resp.json()
print(resp['participants'][0]['stats']['kills'])
list.append(resp['participants'][0]['stats']['kills'])
while i < 1884001540:
url = "https://acs.leagueoflegends.com/v1/stats/game/NA1/" + str(i)
temp = session.get(url, background_callback=testas)
i += 1
print(list)
答案 0 :(得分:2)
通过查看requests-futures-0.9.5.tar.gz中的session.py,必须创建一个未来,以便等待其结果如下所示:
from requests_futures import FuturesSession
session = FuturesSession()
# request is run in the background
future = session.get('http://httpbin.org/get')
# ... do other stuff ...
# wait for the request to complete, if it hasn't already
response = future.result()
print('response status: {0}'.format(response.status_code))
print(response.content)
如README.rst所示,可以而且应该为每个session.get()创建一个future,并等待完成。
这可能会在你的代码中应用,就像在while循环之前开始一样:
future = []
while i < 1884001540:
url = "https://acs.leagueoflegends.com/v1/stats/game/NA1/" + str(i)
future.append(session.get(url, background_callback=testas)
i += 1
for f in future:
response = f.result()
# the following print statements may be useful for debugging
# print('response status: {0}'.format(response.status_code))
# print(response.content, "\n")
print(list)
我不确定你的系统将如何响应大量(1884001440)的期货而另一种方法是通过在较小的组中处理它们,例如每次100或1000。在开始时用相对较少的脚本测试脚本可能是明智的,以找出它们返回结果的速度。
答案 1 :(得分:-1)
从这里https://pypi.python.org/pypi/requests-futures它说
from requests_futures.sessions import FuturesSession
session = FuturesSession()
# first request is started in background
future_one = session.get('http://httpbin.org/get')
# second requests is started immediately
future_two = session.get('http://httpbin.org/get?foo=bar')
# wait for the first request to complete, if it hasn't already
response_one = future_one.result()
因此.result()
似乎正在寻找