Python-IO的多处理和线程

Python-IO的多处理和线程,python,multithreading,python-multithreading,Python,Multithreading,Python Multithreading,您好,我正在尝试给出一个示例,以获取使用线程的非异步代码,并将其转换为同时使用这两种线程的代码 我的目标是: 生成4个进程,每个进程同时生成10个线程 import requests import multiprocessing from concurrent import futures def poll_data_1(data): response = requests.get('https://breadcrumbscollector.tech/feed/') prin

您好,我正在尝试给出一个示例,以获取使用线程的非异步代码,并将其转换为同时使用这两种线程的代码

我的目标是: 生成4个进程,每个进程同时生成10个线程

import requests
import multiprocessing
from concurrent import futures


def poll_data_1(data):
    response = requests.get('https://breadcrumbscollector.tech/feed/')
    print(f'Got data of length: {len(response.content)} in just {response.elapsed}')


def thread_set(data):
    max_workers = 10
    concurrent = futures.ThreadPoolExecutor(max_workers)
    with concurrent as ex:
        ex.map(poll_data_1, data)


data =range(40)
data1 =[]
for l in data:
    data1.append([l])

# Mutliprocessing
with multiprocessing.Pool(processes=4, maxtasksperchild=1) as pool:
    pool.imap_unordered(thread_set, data1)     
    pool.close()
    pool.join()
这段代码可以工作,但看起来一次只打开一个进程。因此,10个线程将运行,超过10个。我的目标是一次运行所有40个线程

我之所以尝试这样做,是因为我的实际应用程序正在尝试执行8000-14000个IO绑定请求。所以线程并没有扩展到那个么高。如果我可以说让我真正的服务器对CPU开放process=并且每个进程产生1000个线程,我认为它会工作得更好


或者我大错特错了。。。谢谢

您需要一个循环来阻止主线程关闭池,直到所有作业完成

替换

pool.imap_unordered(thread_set, data1)

然后再次运行您的示例

此外,您不需要:

pool.close()
pool.join()

因为with语句会自动执行此操作。

所以我只是更新了我的真实代码。。。天啊。。。。之前-运行2分钟23秒-运行0分钟24秒
pool.close()
pool.join()