Как использовать python Multiprocessing для обновления dict и правильной настройки? - PullRequest
0 голосов
/ 17 января 2020

Я хочу go через l oop и обновить dict и установить внутри класса, используя функцию. Если я прав, Multiprocessing.Manager мне не поможет, потому что он только объединяет результат в конце.

Я написал игрушечный пример, чтобы понять, как он работает.

import numpy as np
from multiprocessing import Pool
from multiprocessing.pool import ThreadPool
from tqdm import tqdm_notebook

class MyClass():
    D = {}
    S = set()
    def func(self, l):
        for i in l:
            if i not in self.D:
                self.D[i] = [i]
            else:
                self.D[i].append(i)
            self.S.add(i)

cl = MyClass()
b = np.random.randint(0, 10, 10**8)
spl_b = np.array_split(b, 15)
pl = ThreadPool(5)
with pl as p:
    list(tqdm_notebook(p.imap(cl.func, spl_b), total = 15))
pl.close()
pl.terminate()}

Так что, когда я запускаю этот код с помощью пула, он выводит пустой dict и set, а с ThreadPool он использует только 1 процессор, но выведите все правильно. Что я могу сделать, чтобы использовать несколько процессоров для обновления и проверки объектов класса?

...