多进程
1.1个进程实例:
import multiprocessing
import time
def run(name):
time.sleep(1)
print('hello', name)
if __name__ == '__main__':
p = multiprocessing.Process(target=run, args=('bob',))
p.start()
p.join()
运行结果:
hello bob
2. 同时启用3个进程:
import multiprocessing
import time
def run(name):
time.sleep(1)
print('hello', name)
if __name__ == '__main__':
for i in range(3):
p = multiprocessing.Process(target=run, args=('bob %s'%i,))
p.start()
运行结果:
hello bob 0 hello bob 1 hello bob 2
3.进程里面可以再起新的线程:
import multiprocessing
import time,threading
def thread_run():
print(threading.get_ident()) #获得线程号
def run(name):
time.sleep(1)
print('hello', name)
t=threading.Thread(target=thread_run,)
t.start()
if __name__ == '__main__':
for i in range(3):
p = multiprocessing.Process(target=run, args=('bob %s'%i,))
p.start()
p.join()
运行结果:
hello bob 0 12108 hello bob 1 8552 hello bob 2 9080
4.取进程号。没有起多进程,却出现了2个进程号。再执行一遍,发现父进程号不变,子进程号在发生变化。
from multiprocessing import Process
import os
def info(title):
print(title)
print('module name:', __name__)
print('parent process:', os.getppid()) #父进程的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')
运行结果:
main process line module name: __main__ parent process: 8748 process id: 11976
每一个进程默认都是由父进程启动的。11976这个进程是由pyCharm 8748启用的。

5. 父进程和子进程里面都调用f
from multiprocessing import Process
import os
def info(title):
print(title)
print('module name:', __name__)
print('parent process:', os.getppid()) #父进程的ID
print('process id:', os.getpid()) #自己的ID
print("\n\n")
def f(name):
info('\033[31;1mcalled from child process function f\033[0m') #子进程里也调用f
print('hello', name)
if __name__ == '__main__':
info('\033[32;1mmain process line\033[0m')
p = Process(target=f, args=('bob',)) #父进程里调用f
p.start()
#p.join()
运行结果:发现每一个子进程都是由父进程启动的。即便是主程序,也有一个父进程。
main process line module name: __main__ parent process: 8748 process id: 5604 called from child process function f module name: __mp_main__ parent process: 5604 process id: 11096 hello bob Process finished with exit code 0
浙公网安备 33010602011771号