并发编程 ~~~ 多进程~~~进程创建的两种方式, 进程pid, 验证进程之间的空间隔离, 进程对象join方法, 进程对象其他属性
2024-10-04 16:04:22
一 进程创建的两种方式
from multiprocessing import Process
import time
def task(name):
print(f'{name} is running')
time.sleep(2)
print(f'{name} is gone')
if __name__ == '__main__':
#在windows环境下, 开启进程必须在 __name__ == '__main__' 下面
p = Process(target=task,args=('常鑫',))
p.start()
print('主进程开始')
time.sleep(3)
print('主进程结束')
from multiprocessing import Process
import time
class MyProcess(Process):
def __init__(self,name):
super().__init__()
self.name = name
def run(self):
print(f'{self.name} is running')
time.sleep(2)
print(f'{self.name} is gone')
if __name__ == '__main__':
p = MyProcess('常鑫')
p.start() # 启动的是类里面的run方法
print('主进程')
二 进程pid
import os
import time
print(f'子进程:{os.getpid()}')
print(f'主(父)进程:{os.getppid()}')
time.sleep(50)
三 验证进程之间的空间隔离
from multiprocessing import Process
import time
name = '小虎'
lst = [1,2,3]
def task():
global name
name = '海狗'
lst.append(4)
print(f'子进程{name}')
print(f'子进程{lst}')
if __name__ == '__main__':
p = Process(target=task)
p.start()
time.sleep(2)
print(f'主进程{name}')
print(f'主进程{lst}')
# 子进程海狗
# 子进程[1, 2, 3, 4]
# 主进程小虎
# 主进程[1, 2, 3]
主进程和子进程之间是隔离的
四 进程对象join方法
join让主进程等待子进程结束之后,在执行主进程.
from multiprocessing import Process
import time
def task(sec):
print('running')
time.sleep(sec)
print('gone')
if __name__ == '__main__':
start_time = time.time()
p1 = Process(target= task,args=(1,))
p2 = Process(target= task,args=(2,))
p3 = Process(target= task,args=(3,))
p1.start()
p2.start()
p3.start()
p1.join()
p2.join()
p3.join()
print(time.time() - start_time)
# 优化上面代码:
lst =[]
for i in range(1,4):
p = Process(target=task,args=(i,))
lst.append(p)
p.start()
for k in lst:
k.join()
print(time.time() - start_time)
五 进程对象其他属性
from multiprocessing import Process
import time
def task(name):
print(f'{name}is running')
time.sleep(2)
print(f'{name}is gone')
if __name__ == '__main__':
p = Process(target=task,args=('大黑',),name='进程1')
p.start()
time.sleep(1)
p.terminate() # 杀死子进程
p.join() # 让主进程等待子进程结束之后,在执行主进程.
print(p.is_alive()) # 判断子进程是不是还在运行
print(p.name) # 进程的名字
p.name = '小虎'
print(p.name)
print('主进程')
最新文章
- Bug库
- 利用wikipedia 的API实现对其内容的查询
- window 配置wnmp(转下整理 ,全)
- MySQL中MyISAM和InnoDB的区别
- C++之迭代器
- java 输入输出项目
- 如何利用OCS存取PHP session全局变量
- ie6/7/8中span右浮动折行问题的解决方案
- c#局域网文件搬移
- C# 线程更新UI
- C#怎么得到主机名,IP,MAC
- Android高级开发专题晋升班
- hihoCoder 1252 Kejin Game
- linux命令学习6-dpkg命令
- 【笔记】css 自定义select 元素的箭头样式
- JavaScript 原型的深入指南
- 《连连看》算法c语言演示(自动连连看)
- 【托业】【跨栏】TEST05
- JDBC-Oracle连接教程
- 教程+资源,python scrapy实战爬取知乎最性感妹子的爆照合集(12G)!
热门文章
- Oracle11g在虚拟机win7上的详细安装过程(包括win7在虚拟机上的安装)
- Power BI 概念及 国内版Pro 试用账户注册流程
- SpringBoot+idea搭建微服务简化流程
- 易优CMS:compare的基础用法
- nginx配置文件 http 强跳转 https
- s3c2440裸机-代码重定位(2.编程实现代码重定位)
- openstack-neutron安装与配置
- SpringCloud学习笔记(十一、SpringCloud总结)
- Hibernate session.save()实体类,主键增长问题
- 洛谷 P3805 【模板】manacher算法