Используйте объект Queue, выделенный следующим образом:
que = multiprocessing.Manager().Queue()
Передайте эту переменную рабочим, и они могут использовать que.put(bytes)
, чтобы периодически сообщать, сколько они загрузили с момента последнего отчета.Затем вы просто проверяете размер очереди и извлекаете все входящие отчеты:
downloaded = 0
while not mapObj.ready():
for _ in range(q.qsize()):
downloaded += q.get()
print downloaded, r"bytes downloaded\r",
time.sleep(0.5)
Примечание: Хотя модуль также предоставляет метод multiprocessing.Queue()
, он не полностью эквивалентен multiprocessing.Manager().Queue()
.См. этот вопрос и ответ.