我的问题是,每当我使用thr.results()时,程序就像在一个线程上运行一样。但是当我不使用thr.results()时,它将使用x线程 所以,如果我删除我的if语句,它将在10个线程上运行,如果我在那里它会像在一个1线程上那样行事
def search(query):
r = requests.get("https://www.google.com/search?q=" + query)
return r.status_code
pool = ThreadPoolExecutor(max_workers=10)
for i in range(50):
thr = pool.submit(search, "stocks")
print(i)
if thr.result() != 404:
print("Ran")
pool.shutdown(wait=True)
答案 0 :(得分:0)
那是因为result
将等待未来完成:
返回呼叫返回的值。如果呼叫尚未完成,则此方法将等待超时秒。如果调用未在超时秒内完成,则将引发concurrent.futures.TimeoutError。 timeout可以是int或float。如果未指定超时或无,则等待时间没有限制。
当你在一个循环中有result
时,你提交一个任务,然后等待它完成,然后再提交一个任务,这样一次只能运行一个任务。
更新您可以将返回的期货存储到列表中,并在提交完所有任务后对其进行迭代。其他选项是使用map
:
from concurrent.futures import ThreadPoolExecutor
import time
def square(x):
time.sleep(0.3)
return x * x
print(time.time())
with ThreadPoolExecutor(max_workers=3) as pool:
for res in pool.map(square, range(10)):
print(res)
print(time.time())
输出:
1485845609.983702
0
1
4
9
16
25
36
49
64
81
1485845611.1942203