import multiprocessing as mp
import time as t
class MyProcess(mp.Process):
def __init__(self, target, args, name):
mp.Process.__init__(self, target=target, args=args)
self.exit = mp.Event()
self.name = name
print("{0} initiated".format(self.name))
def run(self):
while not self.exit.is_set():
pass
print("Process {0} exited.".format(self.name))
def shutdown(self):
print("Shutdown initiated for {0}.".format(self.name))
self.exit.set()
def f(x):
while True:
print(x)
x = x+1
if __name__ == "__main__":
p = MyProcess(target=f, args=[3], name="function")
p.start()
#p.join()
t.wait(2)
p.shutdown()
Я пытаюсь расширить класс multiprocessing.Process
добавить метод отключения для того, чтобы иметь возможность выйти из функции, которая потенциально может иметь для запуска в течение неопределенного периода времени. Следуя инструкции из Python Multiprocessing Exit Elegantly How? и добавления передачи аргумента я придумал сам, только получаешь мне этот выход:Расширение mp.Process в Python 3
function initiated
Shutdown initiated for function.
Process function exited.
без реального выхода метода f(x)
. Кажется, что фактическая цель процесса не начинается. Я, очевидно, что-то делаю неправильно, но просто не могу понять, какие идеи?
Спасибо!
Метод 'run' в базовом классе отвечает за фактическое выполнение целевой функции. Поскольку вы переопределили этот метод, ваша целевая функция никогда не запускается. –
Так что я должен попробовать и скопировать исходный метод 'run' в цикле' while' метода 'мой' 'run'? –
Вы могли бы это сделать, но это не поможет. Вам необходимо изменить целевую функцию, чтобы периодически проверять событие 'exit'. –