python-进程&线程
进程(process):相当于一个程序要运行时所需的所有资源的集合,相当于一个车间,不工作
两个进程之间的数据不共享,完全不独立,互相不能访问。
线程(thread):一道单一指令的控制流,寄生在进程中,相当于车间中的工人,工作。一个进程至少需要一个线程,这个线程为主线程,一个进程中可以有多个线程。
cpu的核数越多,代表可以并发的线程越多
一个进程中的不同线程共享数据,多线程在修改同一个数据时,一定要加锁
___线程___
1、threading模块
声明一个线程:t=threading.Thread(target=线程函数名,args=(参数,))
启动一个线程:t.start()
import threading
def func1(n):
print('thread:%s'%n)
t=threading.Thread(target=func1,args=(i,))
t.start()
2、实现多线程并发
即同时启动多个线程,并发运行
import threading
import time
def func1(n):
time.sleep(8) #为了更直观的感受到并发效果~~
print('thread:%s'%n)
for i in range(30): #同时启动30个线程,并发
t=threading.Thread(target=func1,args=(i,))
t.start()
3、线程的其他小方法
t.getName():取线程名 ,该名称是唯一的
t.setName('sefjsjfisojgiod') :设置线程名字,如果不设置,系统会自动起名
threading.active_count() :当前活跃的线程数
threading.current_thread():当前运行的线程实例
import threading
import time
def run(n):
time.sleep(3)
print('thread',n)
print(threading.current_thread()) #打印当前运行的线程的实例
for i in range(10):
t=threading.Thread(target=run,args=(i,))
t.start()
t.setName('kasjdjakldjalsjdlasjdlsd%s'%i) #修改线程的名字,默认是Thread-i
print(t.getName()) #获取线程名,线程名是唯一的
print(threading.active_count()) #统计活跃的线程数
4、线程等待
前面程序运行的时候,都是主线程启动和子线程之后,和子线程一起运行,那么如何实现主线程启动了子线程之后先不运行,等待子线程运行完毕之后(比如有些场景需要主线程拿到子线程的结果)再运行呢?????
线程等待:t.join()
import threading
import time def run(n):
time.sleep(1)
print('thread',n)
t_list=[]
for i in range(10):
t=threading.Thread(target=run,args=(i,))
t.start()
t_list.append(t) #将启动的线程加入到有个列表中
for t in t_list:
t.join() # 等待所有线程运行完毕
print('))))))))))))))))))))))))))))))))))))))))')
注意:如果将t.join()加载t.start()之后,那么就不是并行运行了,变成了串行
5、守护线程
前面主线程执行完毕,未执行的子线程仍继续执行,并不受主线程的影响,有些场景主线程完毕之后,子线程变没有意义了,那么如何让主线程执行完毕之后,子线程也停止执行,程序退出呢???
场景举例:ftpserver为主线程,一个子线程的功能是断开很久没有活跃的连接,比如半小时这个连接没有活动,就将该链接断开。该子线程是一个独立的线程,如果主线程已经退出了,那么该子线程也没有存在的意义了。 怎么实现该子线程在主线程断开之后也停止运行呢???? 将该子线程设置为主线程的守护线程就可以啦~~~
t.setDaemon()
import threading
import time
def run(n):
time.sleep(1)
print('thread:%s'%n)
for i in range(10):
t=threading.Thread(target=run,args=(1,))
t.setDaemon(True) # 启动线程之前,将线程设置为守护进程,则主线程结束后,子线程也结束,不会继续执行
t.start() print('hahhhahahahaha')
python-进程&线程的更多相关文章
- python/进程线程的总结
python/进程线程的总结 一.进程和线程的描述: 进程:最小的资源管理单位 线程:最小的执行单位 执行一个进程时就默认执行一个线程(主线程) 进程和线程的工作方式: 串行: 假如共有A.B.C任务 ...
- Python 进程线程协程 GIL 闭包 与高阶函数(五)
Python 进程线程协程 GIL 闭包 与高阶函数(五) 1 GIL线程全局锁 线程全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的 ...
- python 进程 线程
进程 线程 操作系统 为什么要有操作系统? 操作系统:操作系统是一个用来协调,管理和控制计算机硬件和软件资源的系统程序.位于底层硬件与应用软件之间 工作方式:向下管理硬件 向上提供接口 切换 1.出现 ...
- Python 进程 线程总结
操作系统的底层是 进程 线程 实现的 进程 操作系统完成系统进程的切换,中间有状态的保存.进程有自己独立的空间,进程多,资源消耗大 进程是最小的资源管理单位 可以理解为盛放线程的容器 线程 线程是最小 ...
- python进程.线程和协程的总结
I.进程: II.多线程threading总结 threading用于提供线程相关的操作,线程是应用系统中工作的最小单位(cpu调用的最小单位). Python当前版本的多线程没有实现优先级,线程组, ...
- python -- 进程线程协程专题
进程专栏 multiprocessing 高级模块 要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识. Unix/Linux操作系统提供了一个fork() ...
- python 进程 线程 协程
并发与并行:并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔内发生.在单核CPU下的多线程其实都只是并发,不是并行. 进程是系统资源分配的最小单位,进程的出现是为了更好的 ...
- python进程/线程/协程
一 背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所 ...
- python 进程/线程/协程 测试
# Author: yeshengbao # -- coding: utf-8 -- # @Time : 2018/5/24 21:38 # 进程:如一个人拥有分身(分数数最好为cpu核心数)几乎同时 ...
- python学习笔记-进程线程
1.什么是进程(process)? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述 ...
随机推荐
- [JavaEE笔记]Cookie
引言 由于 Http 是一种无状态的协议,服务器单从网络连接上无从知道客户身份. 会话跟踪是 Web 程序中常用的技术,用来跟踪用户的整个会话.常用会话跟踪技术是 Cookie 与 Session. ...
- 一种开发模式:ajax + ashx + UserControl
一.ajax+ashx模式的缺点 在web开发过程中,为了提高网站的用户体验,或多或少都会用到ajax技术,甚至有的网站全部采用ajax来实现,大量使用ajax在增强用户体验的同时会带来一些负 ...
- Oracle同义词
Oracle的同义词(synonyms)从字面上理解就是别名的意思,和试图的功能类似,就是一种映射关系.本文介绍如何创建同义词语句,删除同义词以及查看同义词语句. Oracle的同义词总结:从字面上理 ...
- 来玩Play框架06 用户验证
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 用户验证(User Authentification)复合的使用Play框架的数个 ...
- 服务器搭建多个tomcat服务器
以三个tomcat为例: 先配置环境变量: 编辑 /etc/profile 文件 添加三个tomcat环境变量:value为tomcat目录 //第一个tomcatCATALINA_BASE=/usr ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.2
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- (转)配置Log4j(很详细)
来自:http://blog.csdn.net/yttcjj/article/details/37957317 Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存 ...
- linux之cp/scp命令+scp命令详解
名称:cp 使用权限:所有使用者 使用方式: cp [options] source dest cp [options] source... directory 说明:将一个档案拷贝至另一档案,或将数 ...
- $_SERVER
$_SERVER[‘HTTP_X_REWRITE_URL’] 和$_SERVER[‘REQUEST_URI’]的区别 php4.4.0不支持 $_SERVER[‘REQUEST_URI’],php5. ...
- ArcGIS Engine开发之地图基本操作(1)
ArcGIS提供的各类数据形式以及相应接口 1. 空间数据 在GIS软件中,空间数据有多种不同的形式存在.按照不同的划分标准可以分为矢量数据和栅格数据.GIS格式数据和非GIS格式数据(CAD格式). ...