python的多线程threading
多线程threading
1.Thread创建线程:
上代码:
#!/usr/bin/env python3
import threading
import time
def A():
t_name = threading.current_thread().name #获取线程名称
for i in range(5):
print(i)
time.sleep(1)
print(t_name)
t1 = threading.Thread(target = A) #创建线程对象
t1.start() #启动线程
print(threading.current_thread().name)
输出结果:
0
MainThread
1
2
3
4
Thread-1
- 一个进程最少且必须有一个线程,是主线程:MainThread,创建出来的是子线程,用Thread-1,Thread-2···命名
- 主线程会等待子线程执行完毕之后才会结束
2.互斥锁(线程锁、全局变量锁):
- 当多个线程同时对一个全局变量进行修改时会出现争抢,导致可能抢到的值是相同的,造成一些线程做了无用功。
上代码:
#!/usr/bin/env python3
import threading
import time
num = 0
def A():
global num
for i in range(1000000):
num += 1
def B():
global num
for i in range(1000000):
num += 1
t1 = threading.Thread(target = A)
t1.start()
t2 = threading.Thread(target = B)
t2.start()
t1.join() #等待线程执行完成后在往下执行
t2.join()
print(num)
执行结果:
1924932
- 按理说结果应该是2000000才对,可是由于线程之间的对全局变量的争抢,导致了值得不稳定。所以要对全局变量每次操作时进行加锁,避免其混乱。
改进版:
#!/usr/bin/env python3
import threading
import time
num = 0
def A():
global num
for i in range(1000000):
lock.acquire() #加锁
num += 1
lock.release() #解锁
def B():
global num
for i in range(1000000):
lock.acquire() #加锁
num += 1
lock.release() #解锁
lock = threading.Lock() #创建锁
t1 = threading.Thread(target = A)
t1.start()
t2 = threading.Thread(target = B)
t2.start()
t1.join() #等待线程执行完成后在往下执行
t2.join()
print(num)
执行结果:
2000000
3.进程与线程的区别
- 每个程序都有至少一个进程,每个进程都有至少一个线程。
- 线程依附于进程,不能独立存在
- 进程与进程直接的内存资源不能共享,只能通过特殊渠道才能通信,如Queue。但是同一进程内的所有线程是可以资源共享的。
- 进程消耗的资源多,线程消耗资源少。
python的多线程threading的更多相关文章
- Python初学——多线程Threading
接着上篇继续跟着沫凡小哥学Python啦 1.1 什么是多线程 Threading 多线程可简单理解为同时执行多个任务. 多进程和多线程都可以执行多个任务,线程是进程的一部分.线程的特点是线程之间可以 ...
- Python:多线程threading模块
目录 Thread对象 Lock对象 local对象 Thread对象: 多任务可以由多进程完成,也可以由一个进程内的多线程完成.进程是由至少1个线程组成的. threading模块在较低级的模块 _ ...
- python之多线程 threading.Lock() 和 threading.RLock()
0.目录 2. threading.Lock() 的必要性3.观察block4.threading.RLock() 的应用场景 1.参考 Thread Synchronization Mechanis ...
- Python学习【第26篇】:Python系列- 多线程(threading)
线程的调用方式:threanding模块 import threading import time def sayhi(num): #定义每个线程要运行的函数 print("running ...
- Python的多线程(threading)与多进程(multiprocessing )
进程:程序的一次执行(程序载入内存,系统分配资源运行).每个进程有自己的内存空间,数据栈等,进程之间可以进行通讯,但是不能共享信息. 线程:所有的线程运行在同一个进程中,共享相同的运行环境.每个独立的 ...
- python多线程threading
本文通过 4个example 介绍python中多线程package —— threading的常用用法, 包括调用多线程, 同步队列类Queue, Ctrl+c结束多线程. example1. 调用 ...
- Python:使用threading模块实现多线程编程
转:http://blog.csdn.net/bravezhe/article/details/8585437 Python:使用threading模块实现多线程编程一[综述] Python这门解释性 ...
- python多线程threading.Lock锁用法实例
本文实例讲述了python多线程threading.Lock锁的用法实例,分享给大家供大家参考.具体分析如下: python的锁可以独立提取出来 mutex = threading.Lock() #锁 ...
- 基于Python的多线程模块Threading小结
步入正题前,先准备下基本知识,线程与进程的概念. 相信作为一个测试人员,如果从理论概念上来说其两者的概念或者区别,估计只会一脸蒙蔽,这里就举个例子来说明下其中的相关概念. 平安夜刚过,你是吃到了苹果还 ...
随机推荐
- SpringBoot项目中使用swagger2暴露resftul接口增加JWT来进行安全性验证
首先推荐两篇文章: 关于保护RestAPI的一些介绍: http://www.jianshu.com/p/6307c89fe3fa token与session的一些区别漫谈: http://www.j ...
- 如何将下载的web工程导入到eclipse中使用
如果你是喜欢编程的,在你的开发工具中一定有许多项目,就像小编一样(PS:小编只想默默地装一X): 我们选中其中的一个项目,然后[Ctrl + C]复制,再[Ctrl + V]粘贴到桌面: 那么 ...
- 配置ntpd时钟同步服务
ntpd时钟同步服务 目录 参考: CentOS配置时间同步NTP: http://www.crsay.com/wiki/wiki.php/server/centos/ntp-set 解决ntp的错误 ...
- 生存分析/Weibull Distribution韦布尔分布
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&am ...
- 远程调试openstack
之前一直没有找到方法调试openstack的horizon代码,现在终于找到方法了,特别感谢下面这篇博客,讲解非常清晰: http://blog.csdn.net/tantexian/article/ ...
- ASP.NET 3.5控件和组件开发技术之客户端回发/回调揭密
本文摘录自<纵向切入ASP.NET 3.5控件和组件开发技术>. 对于服务端控件元素,比如ASP.NET的Button标准服务端控件在提交时可以自动把请求发送到服务端处理,这样的控件我们不 ...
- asp.net DataTable导出 excel的方法记录(第三方)
官网:http://npoi.codeplex.com/ 简单应用,主要是可以实现我们想要的简单效果,呵呵 需要引入dll,可以在官网下载,也可在下面下载 protected void getExce ...
- 漫谈JWT
一.JWT简介[对于了解JWT的童鞋,可以直接跳到最后] 咱们就不弄那些乱七八糟的概念,就简单点说一下JWT是什么.有什么和能干什么 1. JWT概念和作用 JWT全称为json web token, ...
- 面试整理(2)跨域:jsonp与CORS
问题:跨域有哪些方法?jsonp的原理是什么? jsonp: 先说jsonp,jsonp的主要原理是利用script标签的src可以跨域请求,据说有src属性的都可以跨域请求,但script标签返回的 ...
- mysql-connector-python取二进制字节时报错UnicodeDecodeError:'utf-8' codec can't decode byte 0xb0 in position 0
在储存用户密码时,我使用了hmac算法对用户密码加密,加密出来的hash值是一个二进制字节串,我把这个字节串存到mysql的password字段,password字段的数据类型是varbinary. ...