общая память между процессом и главной задачей в python - PullRequest
0 голосов
/ 21 января 2019

с некоторой помощью я мог запустить процесс в python. Теперь я не хочу делиться значением между двумя задачами. Я могу установить значение внутри init, но не могу изменить его внутри метода run.

И, кстати: как убить процесс, когда основной процесс останавливается?

from multiprocessing import Process, Value

import serial
import time


class P(Process):
    def __init__(self, num):
        num.value = 15
        super(P, self).__init__()
    def run(self):
        while True:
            num.value = num.value + 1
            print("run simple process")
            time.sleep(0.5)

def main():
    while True:
        print("run main")
        print (num.value)
        time.sleep(2.5)


if __name__ == "__main__":
    num = Value('d', 0.0)
    p = P(num)
    p.start()
    #p.join()
    main()

1 Ответ

0 голосов
/ 22 января 2019

В вашем упрощенном случае вы только что передали num значение при инициализации времени.
Чтобы получить доступ к этому значению в других методах процесса - установите его как состояние процесса:

class P(Process):
    def __init__(self, num):
        self.num = num
        self.num.value = 15
        super(P, self).__init__()

    def run(self):
        while True:
            self.num.value += 1
            print("run simple process")
            time.sleep(0.5)

Для более «серьезных» случаев -рассмотрите возможность использования Managers и Примитивы синхронизации .

...