Python. Параллельные процессы.
Запись от Фаер размещена 07.10.2012 в 10:14
Показов 18682
Комментарии 0
Метки python
|
Если Вы читали прошлые записи, то, должно быть, помните, что такое GIL. Так же Вы, наверняка, обратили внимание на моё заявление о том, что её можно обойти с помощью процессов. Так вот, пришла пора это сделать. Замечу: параллельные процессы - это изобретение для многопроцессорных систем. Правда, я опробовал мультипроцессинг на Android'е и могу сказать, что скрипты работают и даже выполняют задачи параллельно. Однако это не значит, что одноядерный процессор может выполнять две задачи одновременно, скорее это означает, что он создаёт параллельные потоки. Для того, чтобы посчитать кол-во процессоров на своём компьютере, введите следующие команды:
Важное замечание: Если Вы работаете с модулем multiprocessing в Linux'е или Android'е, то проблем возникнуть не должно(проверено на практике). Но в Windows'е эти программы могут начать чудить: каждый дочерний процесс будет запускать идентичный процесс. В результате происходит своего рода зацикливание. В консоли будут одна за другой появляться одинаковые надписи, а заглянув в диспетчер задач, Вы обнаружите там целую гору процессов, запущенных Вашим скриптом. Чтобы избежать подобного недоразумения нужно писать мультипроцессинговые программы в таком репертуаре:
Но вернёмся к Нашему скрипту. Как видите, класс Process() практически аналогичен Thread()'у. Дождаться завершения процесса можно с помощью метода join(), с которым Мы познакомились в прошлой записи. Вот только приостановить, а потом продолжить выполнение процесса вроде как нельзя. Зато его выполнение можно остановить насовсем:
Класс Process() имеет такое свойство, как daemon. Суть его состоит в следующем: по умолчанию программа, после выполнения всех команд в основном процессе, ожидает завершения процессов дочерних. Атрибут daemon позволяет обойти это ограничение:
| |||||||||||||||||||||||||
Метки python
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии


