Я хочу определить свой многопроцессорность, а затем и мой аргумент для многопроцессорности.

Таким образом, я мог запустить этот процесс, чтобы сказать что-то, а когда он должен сказать что-то другое, это может легко измениться.

import multiprocessing

def tts(Say):
    print(Say)

say = ""
if __name__ == '__main__':
    core1 = multiprocessing.Process(target=tts, args=(say,))
    say = "Hello"
    core1.start()
    core1.join()

Теперь он ничего не печатает, и я хочу, чтобы он напечатал Привет.

0
Stan Willems 5 Июл 2019 в 22:47

3 ответа

Лучший ответ

Расширить класс процесса:

class Proc(mp.Process):
    def __init__(self, ss, *args, **kwargs):
        super(Proc, self).__init__(*args, **kwargs)
        self.ss = ss

    def run(self):
        print(self.ss)

if __name__ == '__main__':
    pp = Proc('aaa')
    pp.ss = 'bbb'
    pp.start()
    pp.join()

Это напечатает bbb

0
BlackBear 6 Июл 2019 в 18:28

Вы передаете объект, который не был определен. Поскольку python интерпретируется, он проверяет значение Say, когда вы вызываете core1 = multiprocessing.Process(target=tts(Say))

Say = "Hello"
core1 = multiprocessing.Process(target=tts(Say))
core1.start()
0
Stan Willems 6 Июл 2019 в 13:27

Я нашел решение для способа обновления переменной.

import multiprocessing
def tts(Say):
    print(Say)

say = ""
def core1(action):
    exec("multiprocessing.Process(target=tts, args=(say,))"+action)

if __name__ == '__main__':
    say = "Hello"
    core1(".start()")

Есть ли лучший способ получить это?

0
Stan Willems 7 Июл 2019 в 07:22