多进程
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