【发布时间】:2023-03-03 04:06:01
【问题描述】:
我有一个高度依赖 I/O 和 CPU 密集型的函数。我试图通过多处理和多线程来并行化它,但它被卡住了。这个问题was asked 之前但在不同的设置中。我的函数是完全独立的,什么也不返回。为什么卡住了?怎么解决?
import concurrent.futures
import os
import numpy as np
import time
ids = [1,2,3,4,5,6,7,8]
def f(x):
time.sleep(1)
x**2
def multithread_accounts(AccountNumbers, f, n_threads = 2):
slices = np.array_split(AccountNumbers, n_threads)
slices = [list(i) for i in slices]
with concurrent.futures.ThreadPoolExecutor() as executor:
executor.map(f, slices)
def parallelize_distribute(AccountNumbers, f, n_threads = 2, n_processors = os.cpu_count()):
slices = np.array_split(AccountNumbers, n_processors)
slices = [list(i) for i in slices]
with concurrent.futures.ProcessPoolExecutor(max_workers=n_processors) as executor:
executor.map( lambda x: multithread_accounts(x, f, n_threads = n_threads) , slices)
parallelize_distribute(ids, f, n_processors=2, n_threads=2)
【问题讨论】:
标签: python multithreading concurrency parallel-processing multiprocessing