Python创建进程、线程的两种方式
代码创建进程和线程的两种方式
"""
定心丸:Python创建进程和线程的方式基本都是一致的,包括其中的调用方法等,学会一个
另一个自然也就会了。
"""
1.创建进程的两种方式
方式一
import os
import time
from multiprocessing import Process # 实例化一个multiprocessing.Process的对象,并传入一个初始化函数对象
def task(name):
print(f'进程 {name} 的PID为{os.getpid()},父进程ID为 {os.getppid()}')
time.sleep(2)
print(f'进程 {name} 的PID为{os.getpid()} 运行结束') if __name__ == '__main__':
# 此处要注意,windows下开启进程一定要在main方法下开启
process1 = Process(target=task, args=('1',))
process2 = Process(target=task, args=('2',))
# 启动进程
process1.start() # 告诉操作系统帮你创建一个进程
process2.start()
print(f'主进程 {os.getpid()}')
方式二
import os
import time
from multiprocessing import Process # 继承类的方式去创建
class MyProcess(Process):
def __init__(self, name):
# 继承Process中的__init__()
super(MyProcess, self).__init__()
self.name = name # 此处必要在该类中创建run方法 重写run方法
def run(self):
print(f'进程 {self.name} 的PID为{os.getpid()},父进程ID为 {os.getppid()}')
time.sleep(2)
print(f'进程 {self.name} 的PID为{os.getpid()} 运行结束') if __name__ == '__main__':
# 创建两个进程
process1 = MyProcess('1')
process2 = MyProcess('2')
# 开启这两个进程
process1.start()
process2.start()
print(f'主进程 {os.getpid()}')
运行结果如下:
"""
主进程 2776
进程 1 的PID为9364,父进程ID为 2776
进程 2 的PID为4140,父进程ID为 2776
进程 1 的PID为9364 运行结束进程 2 的PID为4140 运行结束
"""
2.创建线程的两种方式
方式一
import time
from threading import Thread # 实例化一个multiprocessing.Process的对象,并传入一个初始化函数对象
def task(name):
print(f"线程 {name} is running")
time.sleep(2)
print(f"线程 {name} is over") if __name__ == '__main__':
# 开启线程不需要在main下面执行代码,直接书写就可以
# 但是还是习惯性的将启动命令写在main下面 # 创建两个线程
thead1 = Thread(target=task, args=('1',))
thead2 = Thread(target=task, args=('2',))
# 开启两个线程
thead1.start() # 创建线程的开销非常小,几乎代码一执行线程就创建了
thead2.start()
print("主")
方式二
import time
from threading import Thread # 继承类的方式去创建
class MyThead(Thread):
def __init__(self, name):
# 继承Process中的__init__()
super(MyThead, self).__init__()
self.name = name # 此处必要在该类中创建run方法 重写run方法
def run(self):
print(f"线程 {self.name} is running")
time.sleep(2)
print(f"线程 {self.name} is over") if __name__ == '__main__':
# 创建两个线程
thead1 = MyThead('1')
thead2 = MyThead('1')
# 开启这两个线程
thead1.start()
thead2.start()
print('主')
输出结果为如下:
"""
线程 1 is running
主
线程 2 is running
线程 1 is over线程 2 is over
"""
上方只是简单的创建进程和线程,以上注释只是个人理解,不足的地方还望见谅,欢迎补充
Python创建进程、线程的两种方式的更多相关文章
- python 之 并发编程(线程理论,开启线程的两种方式,进程与线程的区别,线程对象的其他方法)
9.9 线程理论 1.什么是线程 线程指的是一条流水线的工作过程 进程根本就不是一个执行单位,进程其实是一个资源单位,一个进程内自带一个线程,线程才是执行单位 2.进程VS线程 同一进程内的线程们共享 ...
- 并发编程 - 线程 - 1.开启线程的两种方式/2.进程与线程的区别/3.Thread对象的其他属性或方法/4.守护线程
1.开启线程的两种方式: 进程,线程: 进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合)而线程才是cpu上的执行单位) 1.同一个进程内的多个线程共享该进程内的地址资源 2.创建线 ...
- Python 35 线程(1)线程理论、开启线程的两种方式
一:线程理论 1 什么是线程 进程其实一个资源单位,而进程内的线程才是cpu上的执行单位 线程其实指的就是代码的执行过程2 为何要用线程 线程vs进程 1. 同一进程下的多个线程共享该进程 ...
- 【java并发】传统线程技术中创建线程的两种方式
传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式 ...
- 创建线程的两种方式比较Thread VS Runnable
1.首先来说说创建线程的两种方式 一种方式是继承Thread类,并重写run()方法 public class MyThread extends Thread{ @Override public vo ...
- python 并发编程 多线程 开启线程的两种方式
一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 二 开启线程的两种方式 第一种 每造一个进程,默认有一个线程,就是 ...
- Java并发基础01. 传统线程技术中创建线程的两种方式
传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式 ...
- Java新建线程的两种方式
Java新建线程有两种方式,一种是通过继承Thread类,一种是实现Runnable接口,下面是新建线程的两种方式. 我们假设有个竞赛,有一个选手A做俯卧撑,一个选手B做仰卧起坐.分别为两个线程: p ...
- 1.java多线程_实现线程的两种方式
1.java多线程基本知识 1.1.进程介绍 不管是我们开发的应用程序,还是我们运行的其他的应用程序,都需要先把程序安装在本地的硬盘上.然后找到这个程序的启动文件, 启动程序的时候,其实是电脑把当前的 ...
随机推荐
- vscode切换虚拟环境报错无法加载文件 E:\Python_project\shop_env\Scripts\Activate.ps1,因为在此系统上禁止运行 脚本。
在使用vscode切换python的虚拟环境时报错 解决方法如下: Windows+x打开面板,选择以管理员身份运行PowerShell,输入: set-executionpolicy remotes ...
- Linux下C ,C ++, Qt开发环境
目录 Linux发行版的选择 安装常用的开发工具(这里针对C/C++/Qt) 安装openGL 中文输入法 安装sublime text 安装vscode apt-get常用命令 Qt环境 Qt常见问 ...
- jupyter中%matplotlib inline报错
学习matplotlib时,使用的jupyter跑代码.报错如上图.大致就是后面的注释不能被识别.我寻思着注释不用识别吧,大概是因为%后跟的语句被全部当成命令行执行了,然后命令行不识别行内注释,导致报 ...
- JS 原型与原型链终极详解(二)
四. __proto__ JS 在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__ 的内置属性,用于指向创建它的构造函数的原型对象. 对象 person1 有一个 __pr ...
- centos7中防火墙转为iptables
1.关闭firewall systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止fir ...
- python读取hdfs并返回dataframe教程
不多说,直接上代码 from hdfs import Client import pandas as pd HDFSHOST = "http://xxx:50070" FILENA ...
- 华东师范大学数学分析课本p294,引理3的我的更正证明
书上的证明是一个特例,我的证明是,如果这个特例不成立,就继续做n-1,直到特例的情况出现,即可.
- log4j日志打印级别动态调整
1,为什么日志打印级别要动态调整? 随着项目越来越大,访问量也越来越高,遇到问题时想要排查,可是日志一打开却刷的太快太快,不好排查问题,有的时候甚至因为短时间打印日志太多,严重影响了性能,这个时候日志 ...
- Linux企业运维人员最常用命令汇总
本文目录 线上查询及帮助命令 文件和目录操作命令 查看文件及内容处理命令 文件压缩及解压缩命令 信息显示命令 搜索文件命令 用户管理命令 基础网络操作命令 深入网络操作命令 有关磁盘与文件系统的命令 ...
- ⛅剑指 Offer 11. 旋转数组的最小数字
20207.22 LeetCode 剑指 Offer 11. 旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小 ...