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常用序列list、tuples及矩阵库numpy的使用
近期开始学习python机器学习的相关知识,为了使后续学习中避免编程遇到的基础问题,对python数组以及矩阵库numpy的使用进行总结,以此来加深和巩固自己以前所学的知识. Section One: ...
- 平衡树【Treap】
平衡树的板题,用Treap实现. 具体参见注释,写的很详细了,包括了原理,实现以及注意事项 蒟蒻写个注释板子写了两天,太弱了QAQ 感谢niiick指导 Code #include<iostre ...
- Java项目中读取properties文件,以及六种获取路径的方法
下面1-4的内容是网上收集的相关知识,总结来说,就是如下几个知识点: 最常用读取properties文件的方法 InputStream in = getClass().getResourceAsStr ...
- js绑定事件和解绑事件
在js中绑定多个事件用到的是两个方法:attachEvent和addEventListener,但是这两个方法又存在差异性 attachEvent方法 只支持IE678,不兼容其他浏览器 addEv ...
- NOIP模拟赛12
期望得分:100+100+50=250 实际得分:100+100+30=230 A 约数之和(count.pas/c/cpp) TL:1S ML:128MB[Description]我们用 D(x)表 ...
- 51nod 1171 大灾变
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1757 二分答案mid 避难所拆为mid个点 每个避难所的第一个点向第二个 ...
- Python学习笔记(四十九)爬虫的自我修养(一)
论一只爬虫的自我修养 URL的一般格式(带括号[]的为可选项): protocol://hostname[:port]/path/[;parameters][?query]#fragment URL由 ...
- IO流-文件拷贝
其实文件的拷贝还是文件读取写入的应用,实际是读取此路径上的文件,然后写入到指定路径下的文件. 代码举例: import java.io.*; import java.lang.*; class Tes ...
- 【CodeForces】908 E. New Year and Entity Enumeration
[题目]E. New Year and Entity Enumeration [题意]给定集合T包含n个m长二进制数,要求包含集合T且满足以下条件的集合S数:长度<=m,非和与的结果都在集合中. ...
- phpStudy 虚拟主机
转载:http://blog.csdn.net/sinat_35861664/article/details/53557574 windows下配置虚拟主机,实现多域名访问本地项目目录 1.Apach ...