ОС: debian9.
Простая многопроцессорная программа с именем mprocesses.py
.
import os
import multiprocessing
def run_task(name):
print("task %s (pid = %s) is running" %(name,os.getpid()))
while True:
pass
if __name__ == "__main__":
print("current process %s ." %os.getpid())
pool = multiprocessing.Pool(processes = 2)
for i in range(2):
pool.apply_async(run_task,args=(i,))
pool.close()
pool.join()
Запустите python3 mprocesses.py
и оставьте ниже вывода.
python3 mprocesses.py
current process 6145 .
task 0 (pid = 6146) is running
task 1 (pid = 6147) is running
Получить информацию о процессах.
ps lax |grep 'python3 mprocesses.py' |grep -v grep
0 1000 6145 5615 20 0 275428 14600 - Sl+ pts/1 0:00 python3 mprocesses.py
1 1000 6146 6145 20 0 54232 10340 - R+ pts/1 1:01 python3 mprocesses.py
1 1000 6147 6145 20 0 54232 10348 - R+ pts/1 1:01 python3 mprocesses.py
Проверить дерево процессов.
pstree -p 5615
bash(5615)───python3(6145)─┬─python3(6146)
├─python3(6147)
├─{python3}(6148)
├─{python3}(6149)
└─{python3}(6150)
Что меня смутило, это три потока 6148,6149,6150.
Означает ли это, что каждый процесс содержит один процесс?
Возможно, мой логический граф лучше выражает отношения между процессами и потоками.
bash(5615)───python3(6145)─┬─────────────────python3(6146)
| └─{python3}(6149)
|
├──────────────────python3(6147)
├─{python3}(6148) └─{python3}(6150)
1.bash(5615) - процесс отца python3 mprocesses.py
(6145).
2. python3 mprocesses.py
(6145) содержит два процесса 6146 и 6147, созданные pool = multiprocessing.Pool(processes = 2)
.
3.Process(6145) содержит поток (6148), процесс (6146) содержит поток (6149), процесс (6147) содержит нить (6150).
Независимо от того, какой именно идентификатор процесса содержит идентификатор потока.
Правильно ли я понимаю?