day 32 子进程的开启 及其用法
开启两种子进程的两种方式# # # 1 传统方式# from multiprocessing import Process# import time# def task(name):# print ('%s is runing'%name)# time.sleep(2)# if __name__ == '__main__': #在windows 系统下,开子进程的代码必须写到这一行下面# p1 = Process(target= task,args = ('xiaowang',)) # 因为args 是个动态传参 是个他的结果是个元祖# p2 = Process(target= task,kwargs={'name':'xiaoluo',}) # kwargs 是字典传参 上传的是键 # ,加个逗号才是元祖形式# # # 知识点补充 函数传参的话: 在形参角度上,位置参数,*args (动态参数 返回的是元祖),# # # 默认参数(等于的那个)**kwargs(动态参数返回的是字典)# p1.start() #只是在在给操作系统发一个一个信号,让操作系统去开进程,(申请内存+拷贝父进程的地址控制)# p2.start()# print('我是主进程')# # 结果: # 我是主进程 # xiaowang is runing # xiaoluo is runing # 总结开个子进程,子进程和主进程并发运行(看起来是并行),先运行主进程在运行子进程,提升效率。 # 格式: # 引用 from multiprocessing import Process # def 函数名(传参): # 实例化 子进程对象=Process(函数名,动态参数(因为不确定上传的)=元祖形式) # 注意*args = 元祖 因为 如果他在形参的角度上 实参上传后返回的是元祖 # 然而在实参这里 只有现在是元祖上 打印出才是字符串 # 然后开启 进程 子进程对象.start() 固定格式 # 以下就是主进程# 子进程的方法1 例子1 传统# from multiprocessing import Process# import time# def eat(name):# print('%s 正在吃饭'% name)# time.sleep(2)# if __name__ == '__main__':# role = Process(target = eat, args = ('子进程儿子王牧天',)) # 易错点 重点看# role.start()# print('我才是主进程爸爸')# 我才是主进程爸爸# 子进程儿子王牧天# 正在吃饭# 子进程的方法二 自定义的开启子进程的方法 但是不常用了解就行了# import time# from multiprocessing import Process# import time# class Myprocess(Process):# def __init__(self,name):# super().__init__() #继承父类# self.name = name# def run(self):# time.sleep(2)# print('%s正在学习'% self.name) # %s s 必须是小写# if __name__ =='__main__':# p = Myprocess('小花')# p.start()# print('我是主进程')# 我是主进程# 小花正在学习# -------- ---------------------------# 关于join的用法 意思就是 在子进程打印完成后才打印主进程#每个对象加join 必须每个子进程运行完后在运行主进程# from multiprocessing import Process# import time# def eat(name):# print('%s 正在吃饭'% name)# time.sleep(2)# if __name__ == '__main__':# role1 = Process(target = eat, args = ('子进程儿子王牧天',)) # 易错点 重点看# ## role.start() # #role.join() #print('我才是主进程爸爸') # 结果: # 子进程儿子王牧天 # 正在吃饭 # 我才是主进程爸爸 # role2 = Process(target=eat, args=('子进程媳妇小罗',)) # role3 = Process(target=eat, args=('子进程小馒头',)) # role1.start() # role2.start() # role3.start() # role1.join() # role2.join() # role3.join() # print('我是主进程遇到子进程的join 了') # 子进程媳妇小罗 # 正在吃饭 # 子进程儿子王牧天 # 正在吃饭 # 子进程小馒头 # 正在吃饭 # 我是主进程遇到子进程的join了# -----------# # 子进程对象 为了节省代码 运用for 循环# from multiprocessing import Process# import time# def eat(name):# time.sleep(3)# print('%s 正在吃饭'% name)# if __name__ == '__main__':# role1 = Process(target = eat, args = ('子进程儿子王牧天',)) # 易错点 重点看# role2 = Process(target=eat, kwargs={'name':'子进程媳妇小罗'})# role3 = Process(target=eat, args=('我是小王了',))# role_list=[role1,role2,role3]# for role in role_list:# role.start()# for role in role_list:# role.join()# print('我是主进程遇到子进程的join 了') #for循环的位置子进程加上join 就会等到子进程完毕在开始 # 子进程儿子王牧天正在吃饭 # 我是小王了正在吃饭 # 子进程媳妇小罗正在吃饭 # 我是主进程遇到子进程的join了# print('我是主进程遇到子进程的join 了') #子进程加上join 就会等到子进程完毕在开始# 我是主进程遇到子进程的join 了# 我是主进程遇到子进程的join 了# 我是主进程遇到子进程的join 了# 子进程儿子王牧天 正在吃饭# 子进程媳妇小罗 正在吃饭# 我是小王了 正在吃饭# 我是主进程遇到子进程的join 了# -------------------------# #os.getpid() 此处进程的id号码# 在cmd 中运行 tasklist 的意思就是计算机中所有的进程\# 找到python里面的文件的进程 在cmd中 tasklist |管道符 findstr python 就会找到python的进程# tasklist |findlist python# import time,os# print(os.getpid()) #3404# time.sleep(1000)# 显示当前的文件的id# ----------------------------# 其他方法的子孙三代的例子# from multiprocessing import Process# import time,random# def task():# print('孙子运行了')# time.sleep(3)# def piao(name):# print('%s is piaoing' % name)# time.sleep(random.randint(1, 3))# print('%s is done' % name)# p=Process(target=task,) #子类 再次实行实例化 孙子的子进程# p.start()# if __name__ == '__main__':# p1=Process(target=piao,args=('alex',),name='xxxxxxxx')# p1.start() # print('主') # 主 # alex is piaoing # alex is done # 孙子运行了# ----------------\# print(p1.name) #这样的组合 会先打印对象里的 然后再是主进程 然后是子进程 最后是孙子进程# print('猪') # xxxxxxxx # 猪 # alex is piaoing # alex is done # 孙子运行了 # -------------- # p1.join() # print('主') #先打印子进程 然后就是孙进程 最后是主程序 # alex is piaoing # alex is done # 孙子运行了 # 主 # -------------------- # p1.terminate() #杀死子进程 但是需要时间 马上打印的话 下边是活的 # print(p1.is_alive()) # 判断子进程是不是活着的 # ---------------- # p1.join(timeout=1) # 超过1秒就不等他了 # print('主') # ----------------------- # # 进程池 # 提交 / 调用任务的方式有两种: # 同步调用:提交 / 调用一个任务,然后就在原地等着,等到该任务执行完毕拿到结果, # 再执行下一行代码 # 异步调用: 提交 / 调用一个任务,不在原地等着,直接执行下一行代码,结果? # from multiprocessing import Process,Pool 这个是开启子进程 但是后期会不好用 # -------------------------------------- # from concurrent.futures import ProcessPoolExecutor # #新式的开进程# import time, random,os# def piao(name):# print('%s is piaoing %s' % (name, os.getpid())) # #获得进程的id的# time.sleep(5)# if __name__ == '__main__':# p = ProcessPoolExecutor(4)# for i in range(10):# p.submit(piao,'wang%s'%i)# print('主程序',os.getpid())# 先打主程序,然后四个四个的打印 。 # from concurrent.futures import ProcessPoolExecutor# import time, random, os## def piao(name, n):# print('%s is piaoing %s' % (name, os.getpid()))# time.sleep(1)# return n ** 2# if __name__ == '__main__':# p = ProcessPoolExecutor(4)# objs = []# start = time.time()# for i in range(10):# # res=p.submit(piao,'alex %s' %i,i).result() #同步调用# # print(res)# obj = p.submit(piao, 'alex %s' % i, i) # 异步调用# objs.append(obj)## for obj in objs:# print(obj.result())# stop = time.time()# print(stop - start)# # # 关门+等# # # pool.close()# # # pool.join()# p.shutdown(wait=True)# print('主', os.getpid())
转载于:https://www.cnblogs.com/xiaoluoboer/p/7941746.html
day 32 子进程的开启 及其用法相关推荐
- 32位XP开启直接支持4g内存
32位XP开启直接支持4g内存 1. 首先还是必须确认CPU和主板支持PAE和memory remap/hole. 2. 到SYSTEM32下,复制 ntkrnlpa.exe 为 ntkrnl4g.e ...
- fork()创建子进程步骤、函数用法及常见考点(内附fork()过程图)
1.fork()创建子进程详细步骤 2.fork()系统调用函数用法 一个现有进程可以调用fork函数创建一个新的进程. #include<unistd.h> pid_t fork(voi ...
- 子进程及时知道父进程已经退出的最简单方案
[精彩] 子进程及时知道父进程已经退出的最简单方案? http://www.chinaunix.net 作者:yuonunix 发表于:2003-10-31 10:14:14 [发表评论] [查看原 ...
- linux中sed的基本用法,linux sed用法
一.定义 sed 流编辑器,每次从输入中读取一行,用提供的编辑器命令匹配数据.按命令中指定的方式修改流中的数据,然后将生成的数据输出到STDOUT,在流编辑器将所 有命令与一行数据进行匹配后,它会读取 ...
- Format函数用法
function Format(const Format: string; const Args: array of const): string; $[SysUtils.pas 功能 返回按指定方式 ...
- Delphi format的用法
Format是一个很常用,却又似乎很烦的方法,找到一些资料,以供查询之用. 首先看它的声明: function Format(const Format: string; const Args: arr ...
- matlab中find()函数用法
一.基本用法 返回矩阵或向量中非零元素的索引 注意:matlab中下标从1开始 举例: (1)向量 返回非零元素下标 find(vector) x=[1 2 3 0 0 6 7 8 9]; find( ...
- VC++中Format用法
Format是一个很常用,却又似乎很烦的方法,本人试图对这个方法的帮助进行一些翻译,让它有一个完整的概貌,以供大家查询之用: 首先看它的声明: function Format(const Format ...
- Delphi Format函数功能及用法详解
DELPHI中Format函数功能及用法详解 DELPHI中Format函数功能及用法详解function Format(const Format: string; const Args: array ...
- python如何关闭multiprocess_python 开启进程两种方法 multiprocessing模块 介绍
一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu\_count\(\)查看),在python中大部分情况需要使用多进 ...
最新文章
- 什么是产品Backlog(Product Backlog)?
- TensorFlow 官方文档中文版发布啦(持续维护)
- echo -e 参数
- 《机器学习实战》chapter02 K-近邻算法(KNN)
- python爬虫取腾讯视频评论
- .NET 6新特性试用 | 总结:我最喜欢的5个特性
- css 修改文字基准线_css外部样式表怎么写
- 20200320:反转字符串中的元音字母(leetcode345)
- IBM语音识别能力逼近人类水平,获深度学习巨头Yoshua Bengio盛赞
- IDEA中Ctrl+Shift+f快捷键无效的解决方式
- python中eval函数怎么用_python3中eval函数用法简介
- asp毕业设计——基于asp+access的WEB网上留言板设计与实现(毕业论文+程序源码)——网上留言板
- 图论及其应用:第二次作业
- iOS:iOS开发非常全的三方库、插件等等
- tcgames使用有延迟_Tcgames下载使用方法
- 解构企业实名认证的几大「名场面」
- 携程React Native实践
- C语言及ARM中堆栈指针SP设置的理解与总结
- 8000字解读全域用户体验丨星巴克的尖刀与钝点
- 服务器hba卡安装系统,hba原理,raid卡,hba卡。