一 进程创建的两种方式

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('主进程')

并发编程 ~~~ 多进程~~~进程创建的两种方式, 进程pid, 验证进程之间的空间隔离, 进程对象join方法, 进程对象其他属性的更多相关文章

  1. python 之 并发编程(开启子进程的两种方式,进程对象的属性)

    第九章并发编程 同一个程序执行多次是多个进程 import time import os ​ print('爹是:',os.getppid()) #父进程PID,(pycharm) print('me ...

  2. python 并发编程 多线程 开启线程的两种方式

    一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 二 开启线程的两种方式 第一种 每造一个进程,默认有一个线程,就是 ...

  3. java中创建多线程两种方式以及实现接口的优点

    多线程创建方式有两种 创建线程的第一种方式.继承Thread类 1.继承Thread类 2.重写Thread类中的run方法--目的将自定义代码存储在run方法.让线程执行3.调用线程的start() ...

  4. Java线程创建的两种方式

    java多线程总结一:线程的两种创建方式及优劣比较 (一)---之创建线程的两种方式 java实现多线程的两种方法的比较

  5. java多线程机制1(线程创建的两种方式)

    进程:正在运行的程序.(即程序在内存中开辟了一片空间) 线程:是进程的执行单元. 一个进程至少包含了一个多个线程. 多线程是不是可以提高效率:多线程可以合理的利用系统的资源,提高效率是相对的.因为cp ...

  6. :Spring-06 -AOP [面向切面编程] -配置异常通知的两种方式--AspectJ 方式 -Schema-based 方式

    三.配置异常通知的步骤(AspectJ 方式) 1.只有当切点报异常才能触发异常通知 2.在spring 中有AspectJ 方式提供了异常通知的办法 3.实现步骤: 3.1新建类,在类写任意名称的方 ...

  7. SqlServer 创建数据库两种方式

    一个SqlServer 数据库实例大概可以创建三万多个数据库. 创建数据库的第一种方式:SqlServer Management Studio管理工具进行可视化创建. 1).打开数据库管理工具,在&q ...

  8. python进程开启的两种方式

    一.进程 1.1.方式一 from multiprocessing import Process import time #方式一 def task(name): print(f"my na ...

  9. 【iOS开发-72】设置状态栏的两种方式、程序生命周期以及更好地理解几大类(对象)之间的关系

    (1)设置状态栏的2种方式 --第一种方式就是我们在控制器中设置,系统默认就是交给视图控制器去管理的,这样不同视图控制器能够自己定义不同的状态栏例如以下: -(BOOL)prefersStatusBa ...

随机推荐

  1. Seafile对接Amazon S3存储后端

    安装python第三方库boto easy_install boto 进入seafile配置文件.conf添加下面内容 [commit_object_backend] name = s3 bucket ...

  2. 对于prim的一个有趣但有点奇怪的想法

    prim算法找最小生成树适用于无向图,对于有向加权图会产生错误. 比如 1->2,8 1->3,8 2->3,4 3->2,3 最小生成树1->2->3 而不是3- ...

  3. 设置openwrt路由器的防火墙_允许从外网访问内网的ipv6服务

    设置openwrt路由器的防火墙_允许从外网访问内网的ipv6服务 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-11-02. 参考文章: IPv6"内网"设备 ...

  4. promise和axios

    1.接口调用方式 原生ajax 基于jQuery的ajax fetch axios 异步 JavaScript的执行环境是「单线程」 所谓单线程,是指JS引擎中负责解释和执行JavaScript代码的 ...

  5. MySql数据库基础之数据库简介及安装

    MySql数据库简介: 众所周知,MySql数据库是一款开源的关系型数据库,在Web应用方面,MySql是最好的.最流行的RDBMS(Relational Database Management Sy ...

  6. .net core3.0部署Linux服务器 使用Docker容器和Nginx反代理教程

    本人刚接触.net core 由于公司项目需要部署在Linux上 近些日子学习和网上大面积搜教程 我在这给大家归拢归拢借鉴的教程做了套方案(我写的可以实现 但不一定是最好的 仅供参考) 我只用过cor ...

  7. 3.Python常用逻辑运算符

    #header { /* Initially hidden to prevent FLOUC */ display: none; background-color: #fff; /* Display ...

  8. How to: Map a Persistent Class to a Database View Which Has No Key Field如何:映射持久化类到无主键数据库视图

    With XAF, you can build new applications from scratch or maintain existing databases. The How to: Ge ...

  9. DialogHost 关闭对话框

    <Window x:Class="DialogHost.ClosingConfirmation.CodeBehind.MainWindow" xmlns="http ...

  10. SQL Server如何找出一个表包含的页信息(Page)

    在SQL Server中,如何找到一张表或某个索引拥有那些页面(page)呢? 有时候,我们在分析和研究(例如,死锁分析)的时候还真有这样的需求,那么如何做呢? SQL Server 2012提供了一 ...