Я новичок в многопроцессорности.Я изменил простой пример кода, где список отправляется рабочему подпроцессу, изменяется и отправляется обратно на печать.Я изменил его, чтобы проверить, работают ли несколько процессов параллельно, и возвращаются ли они после завершения каждого процесса.Я проверяю это, начиная с итогового значения [0], итогового значения [1], итого [2], итого [3] одновременно , но , заставляя ТОЛЬКО итоговое значение [2] приостановить перед возвратом.
Результат:
всего [0], всего [1] печати в скором времени.
всего [2] ждет (что и должно) НО итого [3] также ждет.
Вывод возвращается следующим образом:
['', 'DOCTYPE', 'HTML']
['LAST', 'NAV']
['TOPIC', 'FORUM']
['HEADLINE2', 'INNERHTML']
Когда я ожидал, что он вернется так:
['', 'DOCTYPE', 'HTML']
['LAST', 'NAV']
['HEADLINE2', 'INNERHTML']
['TOPIC', 'FORUM']
Как я уже сказал, я довольно новичок в подпроцессинге.Любая помощь приветствуется.Спасибо
код для моего примера
import multiprocessing as mp
import time
def worker(inq,outq):
obj = inq.get()
for b in range(len(obj)):
obj[b] = obj[b].upper()
if obj[0] == 'TOPIC': time.sleep(9)
outq.put(obj)
total = [['', 'doctype', 'html'], ['last', 'nav'], ['Topic', 'forum'], ['headline2', 'innerHTML']]
if __name__=='__main__':
inq = []
outq = []
p = []
for i in range(len(total)):
inq.insert(i, mp.Queue())
outq.insert(i, mp.Queue())
p.insert(i, mp.Process(target=worker, args=(inq[i],outq[i])))
p[i].start()
inq[i].put(total[i])
for i in range(len(total)):
# Wait for the worker to finish
p[i].join()
result1 = outq[i].get()
print(result1)