Я пытаюсь заставить объекты классов с несколькими процессами работать во всех ядрах процессора в моей программе на python.Код работает, но он работает только в одном ядре.
Интересно, если дочерние процессы работают последовательно, но я не могу найти простой способ проверить это или избежать его.
Мой код выглядит примерно так
#child processes
import multiprocessing as mp
import time
import random
class child(mp.Process):
def __init__(self,comm):
mp.Process.__init__(self)
self.comm = comm
def run(self):
self.score = self.doWork()
self.comm.put([self.score])
def doWork(self):
k = 0
for x in range(9999):
for y in range(9999):
k = k + 1
return random.randint(1,1000)
#main process
def runSubProcess():
list = []
queue = mp.Queue()
for p in range(4):
p = child(queue)
p.start()
p.join()
list.append(p)
stillRunning = True
while stillRunning:
stillRunning = False
for p in list:
if p.is_alive():
stillRunning = True
time.sleep(0.1)
while not queue.empty():
item = queue.get()
print (item)
if __name__ == "__main__":
runSubProcess()
Я использую Python 3.8 64 бит в 4-ядерном окружении с использованием Windows 10
Строка версии:
Python 3.8.0a1 (теги / v3.8.0a1: e75eeb00b5, 3 февраля 2019, 19:46:54) [MSC v.1916 32 бит (Intel)] на win32