Python并发.futures : threads don't start

标签 python multithreading concurrent.futures

我制作了一个程序,使用并发.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/

相关文章:

.net - 我可以在单元测试中使用.net线程振动器吗?

python-3.x - 使用tornado.ioloop.IOLoop.run_in_executor时如何避免线程过多?

python - `multiprocessing` 与 `concurrent.futures` 中的最大 worker 数

java - 缓存线程池无限增长

java - 需要设计方案 : Enabling menu item from outside JFrame

java - ReentrantLock#tryLock(long,TimeUnit) 在尝试获取锁时在做什么?

python - 可以同时安装 Python 2.7 和 3.5 吗?

python - 使用 python 逐文本比较两个不同的文件

python - 如何考虑 Django 的普通基于类的 View 与使用 REST API

python - SQL:从可能位于另一个表中的列中获取值