Wpis z mikrobloga

Co byście zaproponowali aby osiągnąć coś takiego - w procesie głównym mam dwa równoległe sub procesy, które raportują jakiś tam wynik, coś ala pasek postępu. W 1 linii konsoli musiałby zastępować się print postępu dla 1 procesu, a w drugiej linii konsoli postęp dla 2 procesu. Jak to mądrze rozwiązać? Może to być też jakieś inne rozwiązanie, nie z printem, ważne aby widzieć postęp bez generowania miliona linii w konsoli.

import time
from multiprocessing import Process

def task1():
a = 0
while True:
a += 1
time.sleep(1)
print('\r', a, end='')

def task2():
b = 100
while True:
b += 1
time.sleep(1)
print('\r', b, end='')

def main_proces():
p1 = Process(target=task1)
p2 = Process(target=task2)
p1.start()
p2.start()
p1.join()
p2.join()

if __name__ == '__main__':
main_proces()

#programowanie #python
  • 6
Zostawiam rozwiązanie dla potomności:

import time
from multiprocessing import Process, Value

def task1(a):
while True:
with a.get_lock():
a.value += 1
time.sleep(1)

def task2(b):
while True:
with b.get_lock():
b.value += 1
time.sleep(1)

def printer(a, b):
while True:
print('\r', "a:", a.value, "b:", b.value, end='')
time.sleep(1)

def main_process():
a = Value('i', 0)
b = Value('i', 0)
p1 = Process(target=task1, args=(a,))
p2 = Process(target=task2, args=(b,))
p3 = Process(target=printer, args=(a, b))
p1.start()
p2.start()
p3.start()
p1.join()
p2.join()
p3.join()