你好,我正在尝试拿出一个例子,使用线程的非异步代码,并将其转换为同时使用这两种线程的代码。你知道吗
我的目标: 生成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=to,并且每个进程产生1000个线程,我认为它会工作得更好。你知道吗
或者我错了。。。谢谢!你知道吗
您需要一个循环来阻止主线程关闭池,直到所有作业完成。你知道吗
替换
与
然后再次运行您的示例。你知道吗
您也不需要:
因为with语句会自动执行此操作。你知道吗
相关问题 更多 >
编程相关推荐