Рубрики
Без рубрики

Разветвление Python: Объяснение и иллюстрация

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

Автор оригинала: Team Python Pool.

Разветвление Python: Объяснение и иллюстрация

Привет, кодеры!! В этой статье мы узнаем о разветвлении и его реализации в python. В информатике и технике термин “вилка” имеет в основном два значения:

  • Клонирование процесса
  • Разработка независимо от легальной копии исходного кода

Разветвление в Python:

  • функция fork() создает копию процесса, который ее вызывает
  • Копия выполняется как дочерний процесс
  • Данные и код дочернего процесса поступают из родительского процесса
  • Дочерний процесс имеет другой идентификатор
  • Дочерний процесс также не зависит от родительского процесса

В зависимости от возвращаемого значения метода fork() можно понять, в каком процессе они находятся.

  • Positive – родительский процесс
  • Нулевой дочерний процесс
  • Минус – ошибка в создании процесса

Код для разветвления в python:

import os
def parent_child_process():
   .fork()
   .getpid()
    if n > 0:
      print("Parent process: ", id)
    else:
      print("Child process: ",id)

parent_child_process()

Выход:

вывод разветвления python
вывод разветвления python

Объяснение кода для разветвления Python:

  • Сначала мы импортировали модуль ОС для запуска портативной операционной системы.
  • В соответствии с возвращаемым значением метода fork() мы классифицировали процесс как дочерний или родительский.

Многопроцессорная обработка в Python:

<код>многопроцессорная обработка.Pool – модуль, предоставляемый Python для параллельного выполнения задач в пуле процессов.

from multiprocessing import Pool
import os
def double(i):
    print("I'm process", getpid())
    return i * 2

with Pool() as pool:
   .map(double, [2, 3, 4, 5])
    print(result)
многопроцессорная обработка в python
многопроцессорная обработка в python

Как мы видим, мы выполняли несколько процессов параллельно. Однако при многопроцессорной обработке возникает проблема, когда создается тупик.

Что такое тупик?

Тупик создается между двумя или более процессами, когда процесс ожидает, что другой процесс освободит определенный ресурс, в то время как другой процесс ожидает, что первый процесс освободит свой ресурс. Давайте посмотрим на иллюстрацию.

тупик
тупик

Процесс 1 ожидает ресурс 2, который используется Процессом 2.

Процесс 2 ожидает ресурс 1, который используется Процессом 1.

Таким образом, оба процесса ждут друг друга, порождая тупик.

Проблема с использованием разветвления Python:

fork() копирует все из памяти, но не копирует потоки. Дочерний процесс не содержит потоков, запущенных в родительском процессе. Это может привести к возникновению тупика.

Как решить эту проблему?

Эту проблему можно легко решить, прекратив простое использование метода fork (). Некоторые из методов запуска новых процессов:

  • fork() с последующим execve()- При этом дочерний процесс не наследует состояние модуля и запускается с нуля
  • POSIX fork() – дублирует только поток, вызывающий fork()

Раздвоение против нарезания резьбы

Раздвоение:

Новый процесс создается точно так же, как и старый, с той лишь разницей, что он имеет уникальный идентификатор процесса и собственную ячейку памяти. Дочерний процесс не наследует никаких блокировок файлов, установленных этим процессом. Любые семафоры, открытые в родительском процессе, также открыты в дочернем процессе.

Нарезание резьбы:

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

Отладка раздвоенного процесса в Python:

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

Разветвление HTTP-сервера в Python:

HTTP-сервер-это подкласс socketserver.TCPServer.Несколько потоков или процессов не используются при этом для обработки запросов. Чтобы добавить резьбу или разветвление, новый класс может быть создан с помощью соответствующего mix-inform.

  • класс socketserver.Форкингмиксин
  • класс socketserver.ThreadingMixIn

Убийство раздвоенного процесса в Python:

os.kill() – это метод, доступный в Python, который используется для отправки сигнала указанному процессу с заданным идентификатором процесса.

import os
import signal
.getpid()

os.kill(my_pid, signal.SIGINT)

Кроме того, Читайте

  • Python Обмен двумя переменными с помощью программирования на Python
  • Реализация Python Max Heap | Python Max Heap
  • Понимание класса таймера Python с примерами
  • Проблема рюкзака в Python С различными способами решения

Вывод:

В этой статье мы узнали все о разветвлении в python. Мы также узнали о тупиковых ситуациях и увидели, как разрешать тупики при разветвлении. Затем мы перешли к изучению разницы между раздвоением и нарезанием резьбы и увидели, как href=”https://en.wikipedia.org/wiki/Debugging”>debug и убить раздвоенный процесс в Python. href=”https://en.wikipedia.org/wiki/Debugging”>debug и убить раздвоенный процесс в Python.

Однако, если у вас есть какие-либо сомнения или вопросы, дайте мне знать в разделе комментариев ниже. Я постараюсь помочь вам как можно скорее.

Счастливого Пифонирования!