标签:%s 基础 元组 创建 返回 执行顺序 ali code proc
多任务:
frok():只能在linux下执行
import os import time #在程序运行时,父进程的ID就已经生成完毕了 print(‘当前进程是父进程,id是:%s‘%os.getpid()) ret = os.fork() #创建一个子进程 #ret的值在父进程中是子进程的ID,在子进程中则返回0 print(‘ret的值是%s‘%ret) print(‘*‘*50) if ret == 0: #ret值为0,是子进程 print(‘这是一个子进程:%s,他的父进程是:%s‘%(os.getpid(),os.getppid())) time.sleep(1) #os.getpid()是返回当前进程id,os.getppid()是返回当前进程的父进程id elif ret > 0: #ret值大于0,是在父进程中 print(‘这是父进程:%s,子进程的值是:%s‘%(os.getpid(),ret)) time.sleep(1) else: print(‘进程创建失败‘) time.sleep(1)
如果主进程退出,整个进程就直接退出了,不会因为子进程没执行完而等待子进程结束后才结束整个进程
子进程中修改的全局变量不会影响到父进程的全局变量,多进程中,数据不共享,如果想共享进程中的数据,需要进程间通信
多次fork()的结果:
父进程,子进程执行顺序没有规律,完全看操作系统的调度代码
multiprocessing 在windows上也能用的多进程模块,他提供了一个Process类来代表一个进程对象,这样就能实现跨平台开发了
fork()创建的子进程,如果主进程退出,就所有进程退出
Process类创建的子进程,主进程退出后还会继续执行
from multiprocessing import Process import os import time #将子进程要执行的代码放入函数中 def run_proc(name): print(‘子进程运行中,name = %s , pid = %d...‘%(name,os.getpid())) if __name__ == ‘__main__‘: print(‘父进程%d‘%os.getpid()) #创建一个Process的实例对象,一个实例对象就是一个子进程 p = Process(target=run_proc,args=(‘test‘,)) #传入的是元组,如果只有一个值,要在结尾加逗号 #target后面放的是子进程要运行的函数 #args放的是target里函数需要的参数 print(‘子进程开始执行‘) p.start() #开始执行子进程 p.join() #等待子进程结束后才继续执行后面的函数,通常用于进程同步 print(‘子进程结束执行‘)
实例练习:
from multiprocessing import Process import os import time #将子进程要执行的代码放入函数中 def run_proc(name,age,**kwargs): for i in range(10): print(‘子进程运行中,name = %s,age=%d,pid = %d...‘%(name,age,os.getpid())) print(kwargs) time.sleep(1) print(‘子进程结束‘) if __name__ == ‘__main__‘: p = Process(target=run_proc,args=(‘test‘,18),kwargs={‘tom‘:‘alice‘}) print(‘子进程将要执行‘) p.start() time.sleep(1) p.terminate() #杀死子进程 p.join() print(‘父进程结束‘)
发现子进程就运行了一秒后就被强行结束了,结束后执行输出父进程结束,如果没有调用terminate()的话,会等到子进程循环完才结束
实例练习2:
from multiprocessing import Process import os import time def work_1(interval): print(‘work_1父进程(%s),当前进程(%s)‘%(os.getppid(),os.getpid())) t_start = time.time() #取当前的时间戳 time.sleep(interval) t_end = time.time() print(‘work_1 执行时间为%.2f秒‘%(t_end-t_start)) print(‘work_1结束‘) def work_2(interval): print(‘work_2父进程(%s),当前进程(%s)‘%(os.getppid(),os.getpid())) t_start = time.time() #取当前的时间戳 time.sleep(interval) t_end = time.time() print(‘work_2 执行时间为%.2f秒‘%(t_end-t_start)) print(‘work_2结束‘) if __name__ == ‘__main__‘: print(‘当前程序ID(父进程):%s‘%os.getpid()) p1 = Process(target=work_1,args=(2,)) p2 = Process(target=work_2,name=‘dd‘,args=(3,)) #name参数是给进程取个进程名,没有调用的话程序会默认生成Process-x的程序名 p1.start() p2.start() print(‘p1.name=%s‘%p1.name) print(‘p1.pid=%d‘%p1.pid) print(‘p2.name=%s‘%p2.name) print(‘p2.pid=%d‘%p2.pid) print(‘主进程结束‘)
标签:%s 基础 元组 创建 返回 执行顺序 ali code proc
原文地址:https://www.cnblogs.com/GetAlice/p/9389861.html