我制作了一个程序,使用并发.futures 启动 4 个线程并向列表中的每个网站发送请求。
问题:它无法启动
import requests
import threading
import concurrent.futures
list=['amazon.com', 'google.com', 'youtube.com', 'microsoft.com']
def start(url):
requests.get('https://'+url)
print(line+' finished')
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
for url in list:
executor.submit(start, url)
另一方面,这有效:
import concurrent.futures
def start():
print('lol')
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
for i in range(10):
executor.submit(start)
最佳答案
您刚刚安排了任务,但没有等待结果,并且代码中出现错误(使用 undefined variable ),但错误消息已被上下文管理器“吞没”。
executor.submit方法返回 Future对象,您可以通过调用 result 获取返回值方法:
import requests
import threading
import concurrent.futures
URLS = ['amazon.com', 'google.com', 'youtube.com', 'microsoft.com']
def start(url):
requests.get('https://' + url)
print(f'{url}: finished')
def main():
futures = []
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
for url in URLS:
futures.append(executor.submit(start, url))
for future in futures:
future.result()
if __name__ == "__main__":
main()
关于Python并发.futures : threads don't start,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66953025/