Проблема с количеством дочерних процессов?

#python-3.x #while-loop #multiprocessing

#python-3.x #цикл while #многопроцессорность

Вопрос:

У меня есть следующий код:

 import multiprocessing
import os

def info(title):
    print("~"*50)
    print(title)
    print('module name:', __name__)
    print('parent process:', os.getppid())
    print('process id:', os.getpid())

def foo():
    info("foo()")
    print("bar")

if __name__ == '__main__':
    while True:
        p = multiprocessing.Process(target=foo)
        p.start()
        p.join()
        time.sleep(1)
  

Это работает как шарм для того, что я хочу сделать. По мере того, как я наблюдаю за выполнением сценариев, значения PID растут очень высоко.

Пример вывода:

 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
foo()
module name: __main__
parent process: 1104
process id: 4805
bar
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
foo()
module name: __main__
parent process: 1104
process id: 4806
bar
  

Тем не менее, PID, отображаемый через top , не изменяется:

  1104 x3         20   0 60060 18252  8560 S  0.7  1.9  0:20.55 │           └─ python3 clockMatrix7219.py
 1109 x3         20   0 60060 18252  8560 S  0.0  1.9  0:00.00 │              ├─ python3 clockMatrix7219.py
 1108 x3         20   0 60060 18252  8560 S  0.0  1.9  0:00.00 │              ├─ python3 clockMatrix7219.py
 1107 x3         20   0 60060 18252  8560 S  0.0  1.9  0:00.00 │              ├─ python3 clockMatrix7219.py
 1106 x3         20   0 60060 18252  8560 S  0.0  1.9  0:00.00 │              └─ python3 clockMatrix7219.py
  

clockMatrix7219.py это имя скрипта.

Мой вопрос: может ли это быть проблематичным в будущем? Будет ли ограничение? Потому что скрипт предназначен для запуска в любое время. Кроме того, каждый процесс выполняется только в течение доли секунды и завершается после.

Большое спасибо!

Ответ №1:

Это дало нулевой ответ, но я выяснил, как избежать включения новых процессов в каждый цикл.

Я просто поместил while loop внутри функции.

 import multiprocessing
import os

def info(title):
    print("~"*50)
    print(title)
    print('module name:', __name__)
    print('parent process:', os.getppid())
    print('process id:', os.getpid())

def foo():
    while True:
        info("foo()")
        print("bar")

if __name__ == '__main__':
    p = multiprocessing.Process(target=foo)
    p.start()
    p.join()
    time.sleep(1)