Использование блокировок в python многопроцессорной не работает - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь проверить функциональность блокировки в 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 в порядке возрастания, как я ожидал.

Блокировка в одном процессе не препятствует другому процессу выполнять запись в очередь ? Или есть проблема с использованием?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...