3.3.1 进程操作
多进程的第一个示例
import multiprocessing
import threading
import time
def thread_run():
print(threading.get_ident()) #子线程输出线程ID号
def run(name):
time.sleep(2)
print('Hello ', name)
t = threading.Thread(target=thread_run, )
t.start() #每个进程启动一个子线程
if __name__ == '__main__':
for i in range(10): #启动10个进程
p = multiprocessing.Process(target=run, args=('John', ))
#多进程的语法
p.start()结果
下面的示例可以很清晰的展示父进程和子进程的关系
from multiprocessing import Process
import os
def info(title):
print(title)
print('module name: ', __name__)
print('parent process: ', os.getppid()) #输出parent process id父进程ID
print('process id: ', os.getpid()) #输出当前ID
print('\n\n')
def f(name):
info('\033[31;1mFunction f\033[0m')
print('Hello', name)
if __name__ == '__main__':
info('\033[32;1mMain process line\033[0m')
# p = Process(target=f, args=('John', )) #多进程执行f()函数
# p.start()这里我们多运行几次,看看结果
一次
Main process line module name: __main__ parent process: 10056 process id: 11512
二次
Main process line module name: __main__ parent process: 10056 process id: 14108
三次
Main process line module name: __main__ parent process: 10056 process id: 5236
以上结果,发现每次父进程ID都是一样的,10056,这个10056是谁呢?答案在系统的任务管理器里
可以看到,10056进程就是Pycharm本身的进程。将该示例最后两行的注释去掉,我们接着往下看:
from multiprocessing import Process
import os
def info(title):
print(title)
print('module name: ', __name__)
print('parent process: ', os.getppid()) #输出parent process id父进程ID
print('process id: ', os.getpid()) #输出当前ID
print('\n\n')
def f(name):
info('\033[31;1mFunction f\033[0m')
print('Hello', name)
if __name__ == '__main__':
info('\033[32;1mMain process line\033[0m')
p = Process(target=f, args=('John', )) #多进程执行f()函数
p.start()结果1
Main process line module name: __main__ parent process: 10056 process id: 14852 Function f module name: __mp_main__ parent process: 14852 process id: 10376 Hello John
结果2
Main process line module name: __main__ parent process: 10056 process id: 13988 Function f module name: __mp_main__ parent process: 13988 process id: 9812 Hello John
结果3
Main process line module name: __main__ parent process: 10056 process id: 12836 Function f module name: __mp_main__ parent process: 12836 process id: 8528 Hello John
这里看出了什么?每一条结果中,Function f的父进程ID与Main process line中的进程ID是一致的。
这个结果说明,每个子进程都是由父进程启动的。


浙公网安备 33010602011771号