Python档案袋(线程 )
Python的进程和线程是使用的操作系统的原生线程和进程,其是去调用操作系统的相应接口实现
进程:之间不可直接共享数据,是资源的集合,进程必须有一个线程
线程:基于进程,之间可直接共享数据,可执行,只有所有的线程执行完毕程序才会退出
守护线程:生命值依赖于创建它的主线程,主程序亡,不管守护进程执行到何步也必须立即亡
多线程:不适用与CPU操作任务大的(如计算等),较适合于IO操作任务大的(如文件读写等)
线程实现
简单的线程:
import threading
#线程实现方法,取名任意
def run11(varx):
print("run11",varx)
#创建线程1
t1=threading.Thread(target=run11,args=("var1111",))
t1.start()
#创建线程2
t2=threading.Thread(target=run11,args=("var2222",))
t2.start()
类方法实现线程:
import threading
class DongThreadx(threading.Thread):
#构造方法,可以忽略不写
def __init__(self,varx):
#调用父类的构造方法
super(DongThreadx,self).__init__()
self.threadvar=varx #run方法名不能更改
def run(self):
print("类线程:",self.threadvar)
#创建两个线程
t1=DongThreadx("dongxiaodong11")
t1.start()
t2=DongThreadx("dognxiaodong22")
t2.start()
守护线程实现:
t2=threading.Thread(target=run11,args=("var2222",))
t2.setDaemon(True) #使其成为主线程守护线程
t2.start()
线程补充
其他方法:
print(threading.current_thread()) #当前所属的线程
print(threading.active_count()) #当前活跃的总线程数
t1.join() #等待线程 t1 执行完毕
等待子线程执行完毕:
方法一:
使用join
import threading
import time
num=0 #延时并自增1
def run11():
global num
time.sleep(2)
num+=1 #生成1000个线程
listthreadx=[]
for i in range(10000):
#创建线程
t1=threading.Thread(target=run11,args=())
listthreadx.append(t1)
t1.start() #等待1000个线程执行完毕,并输出结果
for t in listthreadx:
t.join() print("总数为:",num)
方法二:
如果使用【threading.active_count()】的值为1,也说明子线程执行完毕
while threading.active_count() !=1:
pass
print("总数为:",num)
线程锁:
在多个线程中修改同一个数据时,可能会出现数据修改不正确,其是因为多核CPU和多线程造成的,在Python3中已经优化了此类错误,Python2可以使用线程锁进行优化:
lockx=threading.Lock() #得到锁实例
#延时并自增1
def run11():
lockx.acquire() #获取线程锁
global num
num+=1
lockx.release() #释放线程锁
递归锁
【lockx=threading.RLock()】,实现锁和钥匙的一一对应,如果程序有内外嵌套锁时,可以使用其优化
信号量:
规定同时执行的最大线程数
blockx=threading.BoundedSemaphore(10) # 表示10为最大同时启动线程数
#延时并自增1
def run11():
blockx.acquire() #获取线程锁
global num
num+=1
blockx.release() #释放线程锁
标志位:
在线程中封装了bool,实现了基本的标志位功能,其主要方法有:
eventx=threading.Event() #得到event实例
eventx.set() #设置标志位
eventx.wait()#等待标志位设置,一直处于阻塞
eventx.clear() #清除标志位
import threading
import time eventx=threading.Event() #得到event实例 def run11():
print("-----开始,等待标志位----")
eventx.wait()#等待标志位设置,一直处于阻塞
print("---阻塞取消,执行完成------")
eventx.clear() #清除标志位 def run22(times):
time.sleep(times)
eventx.set() #设置标志位 #执行线程
t1=threading.Thread(target=run11,args=())
t1.start() #延时线程
t2=threading.Thread(target=run22,args=(3,))
t2.start()
Python档案袋(线程 )的更多相关文章
- Python之线程、进程和协程
python之线程.进程和协程 目录: 引言 一.线程 1.1 普通的多线程 1.2 自定义线程类 1.3 线程锁 1.3.1 未使用锁 1.3.2 普通锁Lock和RLock 1.3.3 信号量(S ...
- python/进程线程的总结
python/进程线程的总结 一.进程和线程的描述: 进程:最小的资源管理单位 线程:最小的执行单位 执行一个进程时就默认执行一个线程(主线程) 进程和线程的工作方式: 串行: 假如共有A.B.C任务 ...
- 在python中单线程,多线程,多进程对CPU的利用率实测以及GIL原理分析
首先关于在python中单线程,多线程,多进程对cpu的利用率实测如下: 单线程,多线程,多进程测试代码使用死循环. 1)单线程: 2)多线程: 3)多进程: 查看cpu使用效率: 开始观察分别执行时 ...
- python中线程和进程(一)
目录 进程和线程 Python中的线程 1. Thread类 2. 线程的启动 3. 线程的传参 4. 线程的属性和方法 5. daemon线程和non-daemon线程 6. join方法 7. 定 ...
- 一文了解Python的线程
问题 什么是线程? 如何创建.执行线程? 如何使用线程池ThreadPoolExecutor? 如何避免资源竞争问题? 如何使用Python中线程模块threading提供的常用工具? 目录 1. 什 ...
- <python的线程与threading模块>
<python的线程与threading模块> 一 线程的两种调用方式 threading 模块建立在thread 模块之上.thread模块以低级.原始的方式来处理和控制线程,而thre ...
- Python之线程 2 - Python实现线程
一 python与线程 1.全局解释器锁GIL(用一下threading模块之后再来看~~) 2.python线程模块的选择 二 Threading模块 1.线程创建 2.多线程与多进程 3.多线程实 ...
- python之线程相关操作
1.线程: 一个进程可以有多个线程,共享一个进程的资源: 2.进程线程的区别: 进程是资源分配的最小单位,线程是程序执行的最小单位 3.python中线程模块threading, 提供的类: Thr ...
- Python:线程之定位与销毁
背景 开工前我就觉得有什么不太对劲,感觉要背锅.这可不,上班第三天就捅锅了. 我们有个了不起的后台程序,可以动态加载模块,并以线程方式运行,通过这种形式实现插件的功能.而模块更新时候,后台程序自身不会 ...
- {Python之线程} 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Threading模块 九 锁 十 信号量 十一 事件Event 十二 条件Condition(了解) 十三 定时器
Python之线程 线程 本节目录 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Thr ...
随机推荐
- Nginx 静态页面POST 请求提示405 Not Allowed
从git上cp了一个开源的前端框架lay Ajax版本,用Nginx配置访问首页没问题 nginx配置如下: server { listen ; server_name adminhtml.com; ...
- Python @property 详解
本文讲解了 Python 的 property 特性,即一种符合 Python 哲学地设置 getter 和 setter 的方式. Python 有一个概念叫做 property,它能让你在 Pyt ...
- 今天分享三种方法实现Linux系统调用,感兴趣的朋友可以参考一下
系统调用(System Call)是操作系统为在用户态运行的进程与硬件设备(如CPU.磁盘.打印机等)进行交互提供的一组接口.当用户进程需要发生系统调用时,CPU 通过软中断切换到内核态开始执行内核系 ...
- CheckedTextView文字不居中的问题
问题:CheckedTextView设置了android:gravity="center",但是不居中 解决方法:添加属性android:textAlignment="c ...
- 通过excel获取一串连续的数字
输入一个格式的数字 点击按住右下角 拖动即可
- python学习笔记(4)
.................................................................................................... ...
- ef.core Mysql
Entity层 using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; ...
- SVN 问题:None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and no 'editor-cmd' run-time
问题原因: 没有设置svn编辑器的环境变量,主要是import.commit中填写comment要用 解决办法: 编辑 /etc/bashrc 文件,加入如下一行: export SVN_EDITOR ...
- mysql_Navicat数据库破解
Navicat Premium 12.1.16.0安装与激活 Navicat Premium 12是一套数据库开发管理工具,支持连接 MySQL.Oracle等多种数据库,可以快速轻松地创建.管理和维 ...
- SPP-Net理解
文章没有看完,先挑几个点谈一下. 1. 动机 在上一篇文章的末尾提到,RCNN做了很多重复计算,SPP就是为了解决这个问题而提出的的一个方法----空间金字塔池化. 感觉这个问题本质上还是全连接层对r ...