Многопроцессорность Python выходит элегантно Как?

import multiprocessing import time class testM(multiprocessing.Process): def __init__(self): multiprocessing.Process.__init__(self) self.exit = False def run(self): while not self.exit: pass print "You exited!" return def shutdown(self): self.exit = True print "SHUTDOWN initiated" def dostuff(self): print "haha", self.exit a = testM() a.start() time.sleep(3) a.shutdown() time.sleep(3) print a.is_alive() a.dostuff() exit() 

Я просто задаюсь вопросом, почему приведенный выше код действительно не печатает «вы вышли». Что я делаю не так? если да, может кто-нибудь указать мне правильный способ выйти изящно? (Я не имею в виду process.terminate или kill)

  • многопроцессорная очередь python: ставит независимость от получения?
  • Как указать локальный рабочий каталог для threading.Thread и multiprocessing.Pool?
  • Использование многопроцессорности python с различными случайными затратами для каждого процесса
  • python -> модуль многопроцессорности
  • многопроцессор python vs threading для работы cpu для работы с окнами и linux
  • Как использовать все ядра с многопроцессорной обработкой python
  • Многопроцессорный пул с итератором
  • Улучшение скорости выполнения Python с параллельными потоками
  • One Solution collect form web for “Многопроцессорность Python выходит элегантно Как?”

    Причина, по которой вы не видите этого, заключается в том, что вы не общаетесь с подпроцессом. Вы пытаетесь использовать локальную переменную (локальную для родительского процесса), чтобы сигнализировать ребенку, что он должен быть выключен.

    Взгляните на информацию о примитивах синхронности . Вам нужно настроить какой-то сигнал, на который можно ссылаться в обоих процессах. После этого вы сможете щелкнуть переключатель в родительском процессе и дождаться, пока ребенок умрет.

    Попробуйте следующий код:

     import multiprocessing import time class MyProcess(multiprocessing.Process): def __init__(self, ): multiprocessing.Process.__init__(self) self.exit = multiprocessing.Event() def run(self): while not self.exit.is_set(): pass print "You exited!" def shutdown(self): print "Shutdown initiated" self.exit.set() if __name__ == "__main__": process = MyProcess() process.start() print "Waiting for a while" time.sleep(3) process.shutdown() time.sleep(3) print "Child process state: %d" % process.is_alive() 
    Interesting Posts

    Как получить unpickling для работы с iPython?

    Аргумент подпрограммы не передан правильно с Python на Fortran

    Python 2.7, создающий многомерный список

    Как я могу форматировать стеки стека исключения в протоколе Python?

    python: создание книги excel и демпинг csv-файлов в виде рабочих листов

    Python: Как установить mysqldb на windows 7 x64?

    Генерация случайных текстовых строк заданного шаблона

    Как ограничить время выполнения вызова функции в Python

    Каковы преимущества или различия в «assert False» и «self.assertFalse»,

    Как обновить метаданные существующего объекта в AWS S3 с помощью python boto3?

    есть ли способ отслеживать количество раз, когда функция вызывается?

    Eclipse PyDev теперь показывает все ссылки на Tkinter как ошибки

    Генерирование гистограмм в стеке для одних и тех же строк в двух разных кадрах данных с использованием matplotlib в python

    Высокоразмерная структура данных в Python

    (Django) как получить название месяца?

    Python - лучший язык программирования в мире.