基于ThreadPoolExecutor创建线程池并操作的完整攻略可以分为以下步骤:
-
导入ThreadPoolExecutor模块
python
from concurrent.futures import ThreadPoolExecutor
在Python3中,线程池类ThreadPoolExecutor被放置在concurrent.futures模块中,需要先导入该模块才可以使用。 -
创建ThreadPoolExecutor对象
python
with ThreadPoolExecutor(max_workers=3) as executor:
# do something here
在创建ThreadPoolExecutor对象时,需要指定参数max_workers,表示最大的线程数量。在本示例中,我们设置了最大的线程数量为3。 -
将任务提交到线程池中
python
with ThreadPoolExecutor(max_workers=3) as executor:
future1 = executor.submit(function1, arg1, arg2)
future2 = executor.submit(function2, arg3, arg4)
使用submit方法将待执行的任务提交给线程池,并返回一个Future类对象。在上述示例中,我们创建了两个Future对象future1和future2,分别表示将函数function1和function2提交给线程池执行。 -
等待任务完成并获取执行结果
python
with ThreadPoolExecutor(max_workers=3) as executor:
future1 = executor.submit(function1, arg1, arg2)
future2 = executor.submit(function2, arg3, arg4)
result1 = future1.result()
result2 = future2.result()
通过Future对象的result()方法可以等待任务执行完成并获取执行结果。在上述示例中,我们获取了future1和future2的执行结果分别存储在result1和result2中。
示例1:
from concurrent.futures import ThreadPoolExecutor
import time
def task(n):
print(f"Task {n} started")
time.sleep(2)
print(f"Task {n} finished")
return n*10
with ThreadPoolExecutor(max_workers=3) as executor:
future1 = executor.submit(task, 1)
future2 = executor.submit(task, 2)
future3 = executor.submit(task, 3)
result1 = future1.result()
result2 = future2.result()
result3 = future3.result()
print(result1)
print(result2)
print(result3)
上述示例中,我们创建了一个task函数,该函数的功能是模拟耗时的任务。在主程序中,我们创建了一个ThreadPoolExecutor对象,并使用submit方法将task函数提交给线程池执行。在获取执行结果时,我们使用了Future对象的result方法获取执行结果。
示例2:
from concurrent.futures import ThreadPoolExecutor
import requests
def get_url(url):
response = requests.get(url)
return response.status_code
urls = ['https://www.baidu.com', 'https://www.bing.com', 'https://www.google.com']
with ThreadPoolExecutor(max_workers=3) as executor:
futures = [executor.submit(get_url, url) for url in urls]
results = [future.result() for future in futures]
for result in results:
print(result)
上述示例中,我们创建了一个get_url函数,该函数的功能是获取指定URL的状态码。在主程序中,我们创建了一个ThreadPoolExecutor对象,并使用submit方法将get_url函数和待处理URL列表一起提交到线程池中执行。在获取执行结果时,我们使用了Future对象的result方法获取执行结果,并将结果存储在results列表中,最后打印每个URL的状态码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何基于ThreadPoolExecutor创建线程池并操作 - Python技术站