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小结
步入正题前,先准备下基本知识,线程与进程的概念. 相信作为一个测试人员,如果从理论概念上来说其两者的概念或者区别,估计只会一脸蒙蔽,这里就举个例子来说明下其中的相关概念. 平安夜刚过,你是吃到了苹果还 ...
随机推荐
- mybatis基础犯错总结
1.关于mybatis的文件一般都是其mapper文件出错: 首先关于输入参数parameterType出错: (1)基本数据类型:如果输入参数只有一个,其数据类型可以是基本数据类型,也可以是自己定的 ...
- UVA-10375 数学
UVA-10375 题意 : 输入p,q,r,s,求C(p,q)/C(r,s). p,q,r,s<=10000:结果不超过1e8 代码: //显然不能直接计算,考虑每个数都可以由若干个素数乘积得 ...
- Qt ------ 设置透明度
void setWindowOpacity(qreal level); //设置所有控件的不透明度 setAttribute(Qt::WA_TranslucentBackground); // ...
- php 傻瓜式代码计算两个时间间隔
$stamp = (strtotime($_POST['start'])-strtotime($_POST['end'])); $s = $stamp%60; //秒 $m_stamp= ($stam ...
- 分治法:快速排序求第K极值
标题其实就是nth_element函数的底层实现 nth_element(first, nth, last, compare) 求[first, last]这个区间中第n大小的元素 如果参数加入了co ...
- 5 Techniques To Understand Machine Learning Algorithms Without the Background in Mathematics
5 Techniques To Understand Machine Learning Algorithms Without the Background in Mathematics Where d ...
- 如何编写高质量的 jQuery 代码?
想必大家对于jQuery这个最流行的javascript类库都不陌生,而且只要是前端开发人员肯定或多或少的使用或者接触过,在今天的这篇文章中,我们将介绍一些书写高质量jQuery代码的原则,我们不单单 ...
- HDU 1754 I Hate It (线段树)
题目链接 Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老 ...
- VC字体对话框的初始化
本代码需要先添加类成员 LOGFONT lf; void CMyDlg::OnButton3() { // TODO: Add your control notification handler c ...
- windows程序设计.第一个windos程序
Windows程序设计(第5版) windows程序需要调用API. 第一个Windows程序 /*HelloMsg.c -- Displays "Hello World!" in ...