Я потратил некоторое время, пытаясь понять многопроцессорность, хотя ее тонкости уклоняются от моего неподготовленного ума. Мне удалось заставить пул возвращать простое целое число, но если функция не просто возвращает результат, как все примеры, которые я могу найти (даже в документации , это какой-то неясный пример Я не совсем понимаю.
Вот пример, который я пытаюсь заставить работать. НО, я не могу заставить его работать как положено, и я уверен, что есть простая причина, почему. Мне может понадобиться использовать очередь, общую память или менеджера, но столько раз, сколько я читаю документацию, я не могу понять, что это на самом деле означает и что делает. Все, что я смог понять до сих пор, это функция пула.
Кроме того, я использую класс, так как мне нужно избегать использования глобальных переменных, как в ответе на этот вопрос .
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)
Может ли кто-нибудь объяснить, что нужно сделать, чтобы я наконец понял, чего мне не хватает и что это делает?