#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)