Порожденная дочерняя программа

porozhdennaya dochernyaya programma Системные инструменты параллельного выполнения

Так же, как при вводе в командной оболочке, строка аргументов, передаваемая функции os.execlp сценарием forkexec из примера 5.3, запускает еще один файл программы Python, который приводится в примере 5.4.

Пример 5.4. PP4E\System\Processes\child.py

import os, sys

print(‘Hello from child’, os.getpid(), sys.argv[1])

Ниже показано, как этот программный код действует в Linux. Он не сильно отличается от оригинала fork1.py, но в действительности запускает новую программу в каждом ответвленном процессе. Наиболее наблюдательные читатели заметят, что идентификаторы ID дочернего процесса, отображаемые родительской программой и запущенной программой child.py, одинаковые — функция os.execlp просто замещает программу в том же самом процессе:

[C:\\PP4E\System\Processes]$ python fork-exec.py

Child is 4556

Hello from child 4556 1

Child is 5920

Hello from child 5920 2

Child is 316

Hello from child 316 3

q

В языке Python существуют и другие способы запуска программ, помимо комбинации fork/exec. Например, функции os.system и os.popen и модуль subprocess, с которыми мы познакомились в главах 2 и 3, позволяют выполнять команды оболочки. Функция os.spawnv и пакет multiprocessing, с которым мы познакомимся далее в этой главе, позволяют запускать независимые программы и процессы более переносимым способом. Далее мы увидим, что в некоторых ситуациях модель порождения процессов с помощью пакета multiprocessing может использоваться как переносимая замена функции os.fork (хотя и менее эффективная) и применяться в соединении с функциями os.exec*, показанными здесь, для достижения того же эффекта в стандартной реализации Python для Windows.

Далее в этой главе будут представлены другие примеры ветвления процессов, особенно много — в разделах, посвященных приемам завершения процессов и организации взаимодействий между ними, поэтому мы здесь ограничимся уже приведенными примерами. В следующих главах этой книги мы также рассмотрим другие темы, относящиеся к процессам. Например, в главе 12 мы снова вернемся к приему ветвления процессов, чтобы разобраться с зомби — «мертвыми» процессами, затаившимися в системных таблицах после своего конца. А теперь перейдем к потокам выполнения — к теме, которую по крайней мере некоторые программисты находят значительно менее пугающей…

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий