1线程的创建:

import threading
import time,randomdef text1():while True:print(1111111)time.sleep(random.random()*2)def text2():while True:print(2222222)time.sleep(random.random() * 2)
def main():# text1()# text2()#创建多线程t1 = threading.Thread(target=text1)t2 = threading.Thread(target=text2)t1.start()  #执行多线程t2.start()if __name__ == "__main__":main()

2互斥锁:

在多线程之中全局变量是共享的;在执行过程中又可能会发生资源竞争,所以会用到互斥锁:比如

import threading
import time,os,randomnum = 0
def text1(agr):global numfor i in range(agr):num += 1print(num)def text2(agr):global numfor i in range(agr):num += 1print(num)def main():t1 = threading.Thread(target=text1,args=(1000000,))t2 = threading.Thread(target=text2,args=(1000000,))t1.start()t2.start()time.sleep(5)print(num)if __name__ == "__main__":main()

执行结果:如下,而不是我们向看到的2000000

1170362
1302259
1302259

如何解决呢,用到互斥锁:

import threading
import time,os,randomnum = 0
def text1(agr,mutex):global numfor i in range(agr):mutex.acquire()  #上锁num += 1mutex.release()  #解锁print(num)def text2(agr,mutex):global numfor i in range(agr):mutex.acquire()  #上锁num += 1mutex.release() #解锁print(num)def main():mutex = threading.Lock()  #创建一个互斥锁t1 = threading.Thread(target=text1,args=(1000000,mutex))t2 = threading.Thread(target=text2,args=(1000000,mutex))t1.start()t2.start()time.sleep(5)print(num)if __name__ == "__main__":main()

结果:

1846157
2000000
2000000

转载于:https://www.cnblogs.com/yan-peng/p/9972606.html

python3之线程相关推荐

  1. [转载] Python3.X 线程中信号量的使用方法示例

    参考链接: 示例说明Python2.x和Python3.x之间的重要区别 信号量semaphore 是一个变量,控制着对公共资源或者临界区的访问.信号量维护着一个计数器,指定可同时访问资源或者进入临界 ...

  2. python3 停止线程_python3怎么关闭线程

    python3利用自定义异常来退出并关闭线程.方法:1.利用raise自定义异常:2.当触发函数stop_thread时调用自定义异常进行退出. 利用异常使线程退出代码如下:import inspec ...

  3. python3 ThreadPoolExecutor 线程池大小设置

    线程池的理想大小取决于被提交任务的类型以及所部署系统的特性.线程池应该避免设置的过大或过小,如果线程池过大,大量的线程将在相对很少的CPU和内存资源上发生竞争,这不仅会导致更高的内存使用量,而且还可能 ...

  4. python3 一 线程与互斥锁详解

    什么是线程? 可以简单理解为同一进程中有多个计数器,每个线程的执行时间不确定,而每个进程的时间片相等,线程是操作系统调度执行的最小单位. 线程的创建步骤 Import threading # 导入模块 ...

  5. python多线程挂了_python多线程输入的问题 python高效编程技巧13(如何在线程之间实现...

    python3 创建线程时不用args传参,执行线程时为什如果创建线程时在target里就传入了参数,为什么在启动线程时,线程不是在Python多线程下,每个线程的执行方式: 有什么了不起,大不了继续 ...

  6. python3之协程(1)---协程简介

    原文链接:https://www.cnblogs.com/zhangxinqi/p/8337207.html 1.协程的概念 协程,又称微线程,纤程.英文名Coroutine. 线程是系统级别的它们由 ...

  7. python如何强制结束主线程_强制结束线程

    场景: 如果某个线程持续阻塞,无法退出,从而导致整个程序无法结束,此时就需要强制结束线程 思路:由于程序阻塞,比如卡在代码中的某一行后,一直无法向下执行,此时,无法通过常规方式结束线程 方法1: 采用 ...

  8. python线程暂停_python3线程启动与停止

    转自: https://blog.csdn.net/weixin_38125866/article/details/76795462 https://www.cnblogs.com/lcchuguo/ ...

  9. python 获取子线程状态_python线程状态

    python怎么判断线程的状态 python中如何在父线程中检测其子线程是否处于运行状态 子线程有一个方法 is_alive() 运行时会返回Bool值True python 在线程函数中如何实现线程 ...

  10. python基础知识资料-python基础知识整理(值得收藏)

    近些年python语言非常流行,许多开发者都会学习一些python相关知识,本文为大家整理了python的一些基础知识,希望对大家有一定的帮助. 注:下文Python代指Python3. 基本信息和J ...

最新文章

  1. 2020计算机单招的大专,2020专科和单招的区别
  2. abaqus实例_使用Python在ABAQUS中创建XYData数据
  3. 如何使用易我数据恢复向导恢复数码相机删除的图片
  4. 网盘工具比较,以及自己开发的网盘工具[转]
  5. 操作系统—基本知识(细致版)
  6. chm打不开怎么办?
  7. C++SOCKET面试题附答案
  8. h5页面唤起打电话、发短信功能
  9. python中msg是什么意思_MSG是什么意思?
  10. Premiere快捷键设置
  11. win10显示计算机控制面板,win10控制面板,教您win10如何打开控制面板
  12. 自动动态调整广告出价OCPC
  13. 2021-2027全球与中国紫外光固化胶市场现状及未来发展趋势
  14. https://start.spring.io‘ 的初始化失败请检查 URL、网络和代理设置
  15. 使用Locust进行性能测试,Locust启动失败
  16. win10怎么关闭443端口(超详细)
  17. 国内小程序生态服务平台即速应用完成5000万元A+轮融资...
  18. React-mentions 基本使用
  19. Nature Neuroscience:边中心功能网络模型下大脑系统水平的重叠组织构架
  20. 微信小程序相关知识点和云音乐项目制作遇到的问题及解决

热门文章

  1. 怎样成为优秀软件模型设计者
  2. 智能优化算法:基于梯度的优化算法-附代码
  3. ArcGIS相关学习视频链接
  4. matlab的unique函数
  5. 实验平均梯度与图像的模糊程度(matlab 代码)
  6. 初步认识图像的直方图
  7. 微波遥感SNAP(二)——基于Sentinel-1雷达数据反演矿区地表形变
  8. 日照百分率建模及模拟
  9. mysql命令行进入报错ERROR 2002 (HY000)
  10. oracle+规则执行,Oraclejobinterval规则