Я потратил некоторое время, пытаясь понять многопроцессорность, хотя ее тонкости ускользают от моего неподготовленного ума. Мне удалось заставить пул возвращать простое целое число, но если функция не просто возвращает результат, как все примеры, которые я могу найти (даже в документации , это какой-то непонятный пример Я не совсем понимаю.
Вот пример, который я пытаюсь заставить работать. НО я не могу заставить его работать так, как задумано, и я уверен, что есть простая причина, почему. Мне может понадобиться использовать очередь, или разделяемая память, или менеджер, но сколько раз я читал документацию, я не мог понять, что это на самом деле означает и что делает. Все, что мне удалось понять до сих пор это функция пула.
Кроме того, я использую класс, так как мне нужно избегать использования глобальных переменных, как в ответе на этот вопрос .
import random
class thisClass:
def __init__(self):
self.i = 0
def countSixes(myClassObject):
newNum = random.randrange(0,10)
#print(newNum) #this proves the function is being run if enabled
if newNum == 6:
myClassObject.i += 1
if __name__ == '__main__':
import multiprocessing
pool = multiprocessing.Pool(1) #use one core for now
counter = thisClass()
myList = []
[myList.append(x) for x in range(1000)]
#it must be (args,) instead of just i, apparently
async_results = [pool.apply_async(countSixes, (counter,)) for i in myList]
for x in async_results:
x.get(timeout=1)
print(counter.i)
Может ли кто-нибудь объяснить тупым тупым, что должно быть сделано, чтобы я наконец понял, что мне не хватает и что он делает?