multiprocessing python
Нужно написать код мультипроцессинга для двух функций, в одной мы вводим значения старта и конца (например 0 5), и вводим имена (Паша Женя Ваня). Вторая функция (set) печатает результат. Аргументы написанные внутри функции, обязательны.
На выходе надо получить следующее:
Паша 0
Женя 1
Ваня 2
Паша 3
Женя 4
Ваня 5
Нужно использовать Process, Lock, Value. Ниже есть код, я смог только реализовать последовательный счетчик для одной функции. Как соединить его с именами и вывести, я не могу понять.
from multiprocessing import Process, Lock,Value
start = Value('I',0)
def set(name,item,iter_stop,lock):
"""
Prints out the item that was passed in
"""
with start.get_lock():
start.value+=1
print(start.value,name)
def start_g():
start, game_stop = map(int, input().split())
players = input().split()
set
if __name__ == '__main__':
lock = Lock()
lst=['Паша', 'Женя','Ваня']
for item in lst:
p = Process(target=start_g, args=(item, lock))
p.start()
p.join()
Еще есть код функции без использования мультипроцессинга.
def start_game():
start, game_stop = map(int, input().split())
players = input().split()
a=start
lst=[]
while a!=game_stop+1:
for i in players:
lst.append(i)
a=a+1
if a==game_stop+1:
break
for name,current_step in list(zip(lst,range(start,game_stop+1))):
print(f'{name}: {current_step}')
Ответы (1 шт):
Автор решения: splash58
→ Ссылка
Вот, держите работающий код. Если неправильно вас понял, допилите
Можете players положить в разделяемый Array
from multiprocessing import Process, Lock,Value
def set(players, value):
"""
Prints out the item that was passed in
"""
with value.get_lock():
print(value.value, players[value.value % len(players)])
value.value += 1
if __name__ == '__main__':
# start, game_stop = map(int, input().split())
start, game_stop = 0, 6
# players = input().split()
players = ['Паша', 'Женя','Ваня']
value = Value('I', start)
processes = [Process(target=set, args=(players, value)) for i in range(start, game_stop+1)]
for process in processes:
process.start()
for process in processes:
process.join()
for process in processes:
process.close()