我正在尝试使用所有CPU,所以我正在使用线程包
但是我使用十个线程(在12个线程的cpu中)的时间也差不多
我相信python中有一个限制,但是不确定,int top我只看到133%的CPU。
我输入了代码,但我认为这不是软件缺陷。
class normalizeTh(threading.Thread):
def __init__(self, image, idx):
self.image = image
self.output = image
self.idx = idx
threading.Thread.__init__(self)
def run(self):
# print("test")
self.output = exposure.equalize_adapthist(self.image, clip_limit=0.03)
numTheads = 10
def normalizeImgTh(X):
global numThreads
idx = 0
dest = np.empty(X.shape)
ths = []
for img in tqdm(X):
# if we have all threads used, wait until fist is free
if len(ths) >= numThreads:
ths[0].join()
dest[ths[0].idx] = ths[0].output
del ths[0]
nTh = normalizeTh(img, idx)
nTh.start()
ths.append(nTh)
idx += 1
#delete all finished threads... garbage out
for i in range(len(ths),0,-1):
if not ths[i-1].is_alive():
dest[ths[0].idx] = ths[0].output
del ths[i-1]
# wait for all pending threads.
while len(ths) > 0:
ths[0].join()
dest[ths[0].idx] = ths[0].output
return dest
dest=normalizeImgTh(X_train)
最佳答案
与Python相比,此限制可能与硬件和操作系统设置有更多关系。如果您使用线程来执行CPU绑定(bind)的任务,由于全局解释器锁定,我认为Python不会提供帮助。