ThreadPoolExecutor + Requests == 死锁?

8
我有一段微小的代码,它向谷歌搜索服务发送了大量请求。
from concurrent.futures import ThreadPoolExecutor
import requests

import requests.packages.urllib3
requests.packages.urllib3.disable_warnings()


def check(page):
  r = requests.get('https://www.google.ru/#q=test&start={}'.format(page * 10))
  return len(r.text)

import time

def main():
  for q in xrange(30):
    st_t = time.time()
    with ThreadPoolExecutor(20) as pool:
      ret = [x for x in pool.map(check, xrange(1,1000))]
      print time.time() - st_t

if __name__ == "__main__":
  main()

它一开始可以正常工作,但后来出了问题。所有20个线程都在运行,但是它们却什么也不做。我可以在htop中看到它们在运行,但实际上我不明白为什么什么也没有发生。

有什么想法是可能出了问题吗?

1个回答

1

这是一个已知问题,请求团队没有足够的信息进行调试,请参见this。可能是CPython问题,请参见this


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接