python编程中的并发------多线程threading模块
任务例子:喝水、吃饭动作需要耗时1S
单任务:(耗时20s)
for i in range(10):
print('a正在喝水')
time.sleep(1)
print('a正在吃饭')
time.sleep(1)
一、多线程(耗时10s)
threading模块开启2个线程实现
代码如下:
def start(fuc):
for i in range(10):
print('正在{}'.format(fuc))
time.sleep(1) # 定义一个子线程,调用start函数,给定的参数为'喝水'
t1 = threading.Thread(target=start,args = ('喝水',))
# 定义一个子线程,调用start函数,给定的参数为'吃饭'
t2 = threading.Thread(target=start,args = ('吃饭',))
# 开启t1这个子线程
t1.start()
# 开启t1这个子线程
t2.start()
二、多线程问题:共享资源竞争(调用同一个file,或者同一个全局变量导致的问题)
使用全局的互斥锁
例:2个线程都需要使用全局变量a,任务为给a累加到200000
# 定义一个互斥锁
lock = threading.Lock()
a=0 def add():
global a
for i in range(100000):
# 上锁
lock.acquire()
a += 1
# 解锁
lock.release() # 定义一个子线程
t1 = threading.Thread(target=add)
# 定义一个子线程
t2 = threading.Thread(target=add)
# 开启t1这个子线程
t1.start()
# 开启t1这个子线程
t2.start()
while True:
print(a)
lock的第二种写法
# 定义一个互斥锁
lock = threading.Lock()
a=0 def add():
global a
for i in range(100000):
with lock:
a += 1 # 定义一个子线程
t1 = threading.Thread(target=add)
# 定义一个子线程
t2 = threading.Thread(target=add)
# 开启t1这个子线程
t1.start()
# 开启t1这个子线程
t2.start()
while True:
print(a)
python编程中的并发------多线程threading模块的更多相关文章
- python编程中的并发------协程gevent模块
任务例子:喝水.吃饭动作需要耗时1S 单任务:(耗时20s) for i in range(10): print('a正在喝水') time.sleep(1) print('a正在吃饭') time. ...
- python编程中的并发------多进程multiprocessing
任务例子:喝水.吃饭动作需要耗时1S 单任务:(耗时20s) for i in range(10): print('a正在喝水') time.sleep(1) print('a正在吃饭') time. ...
- Python编程中 re正则表达式模块 介绍与使用教程
Python编程中 re正则表达式模块 介绍与使用教程 一.前言: 这篇文章是因为昨天写了一篇 shell script 的文章,在文章中俺大量调用多媒体素材与网址引用.这样就会有一个问题就是:随着俺 ...
- 【转载】Python编程中常用的12种基础知识总结
Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...
- Python编程中常用的12种基础知识总结
原地址:http://blog.jobbole.com/48541/ Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时 ...
- 解析Python编程中的包结构
解析Python编程中的包结构 假设你想设计一个模块集(也就是一个"包")来统一处理声音文件和声音数据.通常由它们的扩展有不同的声音格式,例如:WAV,AIFF,AU),所以你可能 ...
- 详解Python编程中基本的数学计算使用
详解Python编程中基本的数学计算使用 在Python中,对数的规定比较简单,基本在小学数学水平即可理解. 那么,做为零基础学习这,也就从计算小学数学题目开始吧.因为从这里开始,数学的基础知识列位肯 ...
- Python编程中NotImplementedError的使用
Python编程中raise可以实现报出错误的功能,而报错的条件可以由程序员自己去定制.在面向对象编程中,可以先预留一个方法接口不实现,在其子类中实现.如果要求其子类一定要实现,不实现的时候会导致问题 ...
- Python:多线程threading模块
目录 Thread对象 Lock对象 local对象 Thread对象: 多任务可以由多进程完成,也可以由一个进程内的多线程完成.进程是由至少1个线程组成的. threading模块在较低级的模块 _ ...
随机推荐
- 6.10 省选模拟赛 小C的利是 高斯消元 矩阵行列式
LINK:小C的利是 想起来把这道题的题解写了 .一个常识:利是在广东那边叫做红包. 关于行列式的题目 不过我不太会23333..口胡还是可以的. 容易想到10分的状压.不过没什么意思. 仔细观察要求 ...
- bzoj 题目选做
这里将记录着我在接下来的日子里在bzoj上遇到的各种 毒瘤题目 1.轮状病毒 题目是很没意思的 列出状态 显然无法递推 我简单推了一下加动态加点的状态 嗯发现规律没有那么简单 打表 也不太能发现吧 正 ...
- 使用Scrapy编写爬虫程序中遇到的问题及解决方案记录
1.创建与域名不一致的Request时,请求会报错 解决方法:创建时Request时加上参数dont_filter=True 2.当遇到爬取失败(对方反爬检测或网络问题等)时,重试,做法为在解析res ...
- RabbitMQ学习总结(2)-API的使用
1. 引用依赖 <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-clie ...
- C 语言学习 说明
因经常使用C++以及从未系统的学习C,导致最近写C的时候有种混沌感: 首先:对于哪些是C 的标准头文件尚不能很清晰的认知 其次:C 的某些函数属于哪个头文件,这个函数背后的原理实现较多不能理清 因此觉 ...
- 国浩:Cassandra在360的最新进展
大家好,我是来自奇虎360的国浩.今天我给大家带来的是Cassandra在360的最新进展. 我会从四个方面来介绍Cassandra在360的应用情况:Cassandra在360的使用历史再结合两个案 ...
- 我还在生产玩 JDK7,JDK 15 却要来了!|新特性尝鲜
自从 JDK9 之后,每年 3 月与 9 月 JDK 都会发布一个新的版本,而2020 年 9 月即将引来 JDK15. 恰巧 IDEA 每四五个月会升级一个较大的版本,每次升级之后都会支持最新版本 ...
- 每日一道 LeetCode (9):实现 strStr()
每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...
- Cross-Stage-Partial-Connections
- JAVA—继承及抽象类
继承的概念 在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法. 与css中继承父元素属性类似 继承的 ...