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小结
步入正题前,先准备下基本知识,线程与进程的概念. 相信作为一个测试人员,如果从理论概念上来说其两者的概念或者区别,估计只会一脸蒙蔽,这里就举个例子来说明下其中的相关概念. 平安夜刚过,你是吃到了苹果还 ...
随机推荐
- python学习笔记(七) 类和pygame实现打飞机游戏
python中类声明如下: class Student(object): def __init__(self, name, score): self.name = name self.score = ...
- 详解 Cookie 和 Session 关系和区别
在技术面试中,经常被问到“说说Cookie和Session的区别”,大家都知道,Session是存储在服务器端的,Cookie是存储在客户端的,然而如果让你更详细地说明,你能说出几点?今天个推君就和大 ...
- I/O多路复用一些概念
一.前言 在事件驱动模型中,我们说当程序遇到I/O操作时,注册 一个回调到事件循环中,主程序继续做其他事情.当I/O操作完成后,再切换回原来的任务.这就是说I/O操作是和程序本身没关系的,其实I/O操 ...
- 深度学习voc数据集图片resize
本人新写的3个pyhton脚本. (1)单张图片的resize: # coding = utf-8 import Image def convert(width,height): im = Image ...
- string的内存本质
虽然没有研究过string的源代码,不过可以确定的是string的内存空间是在堆上开辟的,它自己负责释放空间,不用我们关系. 我们用一个动态分配的字符串指针初始化一个string对象retStr,它会 ...
- Win10环境下配置VScode的C++编译环境
写前感想:前前后后,折腾好几次,最后还是在学长安利下,开始入坑vscode了.原因一个是小巧,还有就是vs新建工程码题的方式太消耗内存了,基本每个项目就是以MB为单位计算的,然后希望用这篇文章记录自己 ...
- POJ 1113 Wall 凸包 裸
LINK 题意:给出一个简单几何,问与其边距离长为L的几何图形的周长. 思路:求一个几何图形的最小外接几何,就是求凸包,距离为L相当于再多增加上一个圆的周长(因为只有四个角).看了黑书使用graham ...
- Python学习笔记(三十五)—内置模块(4)struct
摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431955007 ...
- 本地文件夹如何断开svn连接
最近遇到一个问题,svn的项目down失败,一不小心点了删除准备重新上传,发现本地的文件已有svn源信息,提交更新均报再找不到此文件路径. 于是想着删除此文件夹的svn信息,经过一番百度,以下方法测试 ...
- 通用标签、属性(body属性、路径、格式控制)
通用标签.属性 一.body属性 1.bgcolor属性:网页背景颜色 2.text属性:规定文档中所有文本的颜色. 3.background属性:规定文档的背景图像. 二.路径 1.绝对路径: 从根 ...