L oop завершение с использованием общего значения между процессами в python многопроцессорности - PullRequest
0 голосов
/ 07 мая 2020

Я хочу, чтобы l oop в функции 1 завершалось, когда значение var устанавливается в 0 процессом 2

var=multiprocessing.Value('i',1) #Using this variable as a shared variable between the processes.

def function1():
 #Loops until value of var is changed to 0 by function or process2
    while True:
     print("Hello")
     if var.value==0:
         break

def function2():
    print("Sleep")
    time.sleep(2)
    var.value=0
    print(var.value)

if __name__ == '__main__':
    multiprocessing.Process(target=function1).start()
    multiprocessing.Process(target=function2).start()

1 Ответ

0 голосов
/ 07 мая 2020

Ваш пример работает, вы поместили «время импорта» в начало вашего скрипта?

Другие улучшения: заблокируйте переменную перед присвоением нового значения:

def function2():
    print("Sleep")
    time.sleep(2)
    with var.get_lock():
        var.value=0
    print(var.value)

И не не использовать его глобально. Лучше определите новую входную переменную в своей функции.

Окончательный пример:

#!/usr/bin/env python3

import multiprocessing, time

var=multiprocessing.Value('i',1) #Using this variable as a shared variable between the processes.

def function1(v):
 #Loops until value of var is changed to 0 by function or process2
    while True:
     print("Hello")
     if v.value==0:
         break

def function2(v):
    print("Sleep")
    time.sleep(2)
    with v.get_lock():
        v.value=0
    print(v.value)

if __name__ == '__main__':
    multiprocessing.Process(target=function1, args = [var]).start()
    multiprocessing.Process(target=function2, args = [var]).start()
...