任务例子:喝水、吃饭动作需要耗时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模块的更多相关文章

  1. python编程中的并发------协程gevent模块

    任务例子:喝水.吃饭动作需要耗时1S 单任务:(耗时20s) for i in range(10): print('a正在喝水') time.sleep(1) print('a正在吃饭') time. ...

  2. python编程中的并发------多进程multiprocessing

    任务例子:喝水.吃饭动作需要耗时1S 单任务:(耗时20s) for i in range(10): print('a正在喝水') time.sleep(1) print('a正在吃饭') time. ...

  3. Python编程中 re正则表达式模块 介绍与使用教程

    Python编程中 re正则表达式模块 介绍与使用教程 一.前言: 这篇文章是因为昨天写了一篇 shell script 的文章,在文章中俺大量调用多媒体素材与网址引用.这样就会有一个问题就是:随着俺 ...

  4. 【转载】Python编程中常用的12种基础知识总结

    Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...

  5. Python编程中常用的12种基础知识总结

    原地址:http://blog.jobbole.com/48541/ Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时 ...

  6. 解析Python编程中的包结构

    解析Python编程中的包结构 假设你想设计一个模块集(也就是一个"包")来统一处理声音文件和声音数据.通常由它们的扩展有不同的声音格式,例如:WAV,AIFF,AU),所以你可能 ...

  7. 详解Python编程中基本的数学计算使用

    详解Python编程中基本的数学计算使用 在Python中,对数的规定比较简单,基本在小学数学水平即可理解. 那么,做为零基础学习这,也就从计算小学数学题目开始吧.因为从这里开始,数学的基础知识列位肯 ...

  8. Python编程中NotImplementedError的使用

    Python编程中raise可以实现报出错误的功能,而报错的条件可以由程序员自己去定制.在面向对象编程中,可以先预留一个方法接口不实现,在其子类中实现.如果要求其子类一定要实现,不实现的时候会导致问题 ...

  9. Python:多线程threading模块

    目录 Thread对象 Lock对象 local对象 Thread对象: 多任务可以由多进程完成,也可以由一个进程内的多线程完成.进程是由至少1个线程组成的. threading模块在较低级的模块 _ ...

随机推荐

  1. Day01_mongoDB入门

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网:http://www.itheima.com 传智播客官网:http://www.itcast.cn 微信搜索"艺术行者",关注 ...

  2. Python列表函数和方法

    Python列表函数和方法: 函数: len(列表名): 返回列表长度 # len(列表名): # 返回列表长度 lst = [1,2,3,'a','b','c'] print("lst 列 ...

  3. PHP 类型比较

    PHP 类型比较 虽然 PHP 是弱类型语言,但也需要明白变量类型及它们的意义,因为我们经常需要对 PHP 变量进行比较,包含松散和严格比较. 松散比较:使用两个等号 == 比较,只比较值,不比较类型 ...

  4. PHP array_combine() 函数

    ------------恢复内容开始------------ 实例 通过合并两个数组来创建一个新数组,其中的一个数组元素为键名,另一个数组元素为键值: <?php$fname=array(&qu ...

  5. Android中Activity启动模式探索

    Android中启动模式(launchMode)分为standard, singleTop, singleTask, singleInstance四种,可通过AndroidManifest.xml文件 ...

  6. Phantomjs实现后端生成图片文件

    目录 PhantomJS简介 了解rasterize.js 使用方法 今天,给大家分享一个Java后端利用Phantomjs实现生成图片的功能,同学们使用的时候,可以参考下! PhantomJS简介 ...

  7. Linux的VMWare中Centos7文件查找(find-grep)和vim文本编辑器基操

    一.find文件查找 grep 匹配字段 文件名 ——筛选文件   find查找 语法参数示例 格式: find 查找范围 查找类型 参数   find / -name *.conf   按文件名查找 ...

  8. Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependen

    Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependen ...

  9. Python分析6000家破产IT公司

    前一阵有个字节跳动的程序员火了,年仅28岁实现了财务自由,宣布提前退休.最直接的原因是选择了一家发展前景很好的创业公司.当然平时我们经常能听到,某某人加入创业公司,xx年后公司上市,身价暴涨,财务自由 ...

  10. Kaggle-pandas(4)

    Grouping-and-sorting 教程 映射使我们可以一次将整个列中的数据转换为DataFrame或Series中的一个值. 但是,通常我们希望对数据进行分组,然后对数据所在的组进行特定的操作 ...