ThreadPoolExecutor + 请求 == 死锁?

Ant*_*kau 6 python request threadpoolexecutor concurrent.futures

我有一个很小的愚蠢代码,它向谷歌搜索服务提出了很多请求

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()
Run Code Online (Sandbox Code Playgroud)

它首先起作用,但后来出了点问题。所有 20 个线程都处于活动状态,但随后它们什么也不做。我可以在 htop 中看到它们还活着,但实际上我不明白为什么什么也没发生。

任何想法可能是错误的?

小智 1

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