我正在尝试使用所有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不会提供帮助。

09-28 04:30