Я пытаюсь проверить функциональность блокировки в Python многопроцессорной обработке. Вот мой код:
from multiprocessing import Process, Queue, Lock
def fn(N,q,l):
l.acquire()
for i in range(N, N+500):
q.put(i)
l.release()
if __name__ == "__main__":
q = Queue()
l = Lock()
p1 = Process(target=fn, args = (0,q,l,))
p2 = Process(target=fn, args = (500,q,l,))
p1.start()
p2.start()
p1.join()
p2.join()
while(q.empty() == 0):
print(q.get(), end=" ")
Я использую объект Queue для ввода чисел от 1 до 1000, используя два процесса, а затем распечатываю их в том же порядке. Я использую блокировку, чтобы убедиться, что порядок вставки остается в порядке возрастания и не перемешивается. Однако при извлечении из очереди вывод происходит в беспорядочном порядке, а не от 1 до 1000 в порядке возрастания, как я ожидал.
Блокировка в одном процессе не препятствует другому процессу выполнять запись в очередь ? Или есть проблема с использованием?