Я хочу иметь два процесса, один для записи и один для чтения из одной и той же переменной. Записанные данные выглядят так:
[0, 0]
[0, 1]
[1, 0]
[1, 1]
[2, 0]
[2, 1]
[3, 0]
[3, 1]
[4, 0]
[4, 1]
[5, 0]
[5, 1]
[6, 0]
[6, 1]
[7, 0]
[7, 1]
[8, 0]
[8, 1]
[9, 0]
[9, 1]
Но у меня возникли проблемы, потому что процесс чтения читает между изменением переменной, формируя новые пары, поэтому я хочу использовать Lock / Mutex, чтобы предотвратить это происходит снова Я думаю, мне придется заблокировать объект, прежде чем менять его. OBS: объект распределяется между процессами с помощью менеджера.
Вот основной код:
import multiprocessing
def mde(dad, mutex):
for i in range(10):
for j in range(2):
mutex.acquire()
dad[0] = i
dad[1] = j
mutex.release()
def mda(dad):
c = 0
while c < 30:
print(dad)
c += 1
if __name__ == '__main__':
manager = multiprocessing.Manager()
mutex = manager.Lock()
dado = manager.list([0, 0])
p1 = multiprocessing.Process(target=mde, args=(dado, mutex,))
p2 = multiprocessing.Process(target=mda, args=(dado,))
p1.start()
p2.start()
p1.join()
p2.join()
Как вы можете видеть, я пытался заблокировать и разблокировать переменную в процессе записи, но результат все еще был перепутан. Что я делаю не так?