多线程模块:threading
threading 常见用法:
(1) 在 thread 中,我们是通过 thread.start_new_thread(function, args) 来开启一个线程,接收一个函数和该函数的参数,函数的参数必须是元组的形式
(2) 在 threading 中,我们是通过 threading.Thread(target=function, args=(....)) 来创建一个对象,然后再通过对象的 start() 方法来开启一个线程,多个线程可以并发执行
#!/usr/bin/env python
#-*- coding:utf-8 -*- import time
import threading def fun():
print time.ctime()
time.sleep(1) for i in range(3):
t = threading.Thread(target=fun, args=()) # 创建一个 Thread 对象,接收一个函数和该函数的参数
t.start() # 通过对象来开启一个新的线程,通过线程来执行函数
[root@localhost ~]$ python 1.py # 多个线程并发执行,只需要执行一秒
Mon Jan 28 21:15:35 2019
Mon Jan 28 21:15:35 2019
Mon Jan 28 21:15:35 2019
threading 有两种方法可以开启一个新的线程:
(1) 如上面的例子,通过创建 Thread 对象,然后通过对象的 start() 方法来运行一个新的线程
(2) 第二种方法是继承 threading.Thread 这个类, 然后重写 run() 方法来运行一个新的线程
#!/usr/bin/env python
#-*- coding:utf-8 -*- import time
import threading class MyThread(threading.Thread): def __init__(self):
threading.Thread.__init__(self) def run(self):
print time.ctime()
time.sleep(1) for i in range(3):
t = MyThread()
t.start()
[root@localhost ~]$ python 1.py
Mon Jan 28 23:53:02 2019
Mon Jan 28 23:53:02 2019
Mon Jan 28 23:53:02 2019
threading.Lock():用于创建一个锁对象,我们可以同时开启多个线程,但是在任意时刻只能有一个线程能在解释器运行,因此需要由全局解锁器(GIL)控制运行哪个线程
锁对象的常用方法如下:
lock = threading.Lock() 创建一个锁对象
lock.acquire() 锁上锁,当某个线程被锁上之后,会优先执行这个锁的内容,直到锁释放才会执行其他线程
lock.locked() 查看锁的状态,如果已经被锁上了则返回True,否则返回False
lock.release() 释放锁,必须先获得锁才能释放锁
#!/usr/bin/env python
#-*- coding:utf-8 -*- import time
import threading def hello():
for i in range(3):
hello_lock.acquire()
print('hello'),
time.sleep(1)
world_lock.release() def world():
for i in range(3):
world_lock.acquire()
print('world')
time.sleep(1)
hello_lock.release() hello_lock = threading.Lock()
world_lock = threading.Lock() world_lock.acquire()
t1 = threading.Thread(target=hello, args=())
t2 = threading.Thread(target=world, args=()) t1.start()
t2.start()
[root@localhost ~]$ python 1.py
hello world
hello world
hello world
其他常用方法:
t.join()方法用于阻塞下一个线程的运行,等待当前线程执行完再执行下一个线程,例子如下:
#!/usr/bin/env python
#-*- coding:utf-8 -*- import time
import threading def fun():
print time.ctime()
time.sleep(1) for i in range(3):
t = threading.Thread(target=fun, args=())
t.start()
t.join()
[root@localhost ~]$ python 1.py # 由于线程被阻塞,需要执行3秒
Mon Jan 28 21:33:35 2019
Mon Jan 28 21:33:36 2019
Mon Jan 28 21:33:37 2019
t.setDaemon()方法用于设置当前线程随着主线程的退出而退出,例子如下:
#!/usr/bin/env python
#-*- coding:utf-8 -*- import time
import threading def fun(): # 函数的功能是打印三次当前时间
for i in range(3):
print time.ctime()
time.sleep(1) t = threading.Thread(target=fun, args=())
t.setDaemon(True)
t.start() print 'End...' # 执行 print 之后,主线程就退出了,最终结果只会打印一次
[root@localhost ~]$ python 1.py
Mon Jan 28 21:54:48 2019
End...
t.getName() 用于获取线程的名字,t.setName() 用于重新设置线程的名字,默认的线程名是 Thread-1,Thread-2,Thread-3,......
#!/usr/bin/env python
#-*- coding:utf-8 -*- import time
import threading def fun():
newName = 'new-' + t.getName()
print newName
time.sleep(1) for i in range(3):
t = threading.Thread(target=fun, args=())
t.start()
[root@localhost ~]$ python 1.py
new-Thread-1
new-Thread-2
new-Thread-3
多线程模块:threading的更多相关文章
- 基于Python的多线程模块Threading小结
步入正题前,先准备下基本知识,线程与进程的概念. 相信作为一个测试人员,如果从理论概念上来说其两者的概念或者区别,估计只会一脸蒙蔽,这里就举个例子来说明下其中的相关概念. 平安夜刚过,你是吃到了苹果还 ...
- Python并发复习2 - 多线程模块threading
一.多线程的调用 threading 模块建立在thread 模块之上.thread模块以低级.原始的方式来处理和控制线程,而threading 模块通过对thread进行二次封装, 提供了更方便的a ...
- 用生动的案例一步步带你学会python多线程模块
鱼和熊掌不可兼得 鱼,我所欲也,熊掌,亦我所欲也,二者不可得兼,舍鱼而取熊掌者也. 从6月开始写公众号,连着四个月一直尽量保证一周五更,结果整天熬夜搞的身体素质骤降.十一休假决定暂时将公众号放放,好好 ...
- python笔记9 线程进程 threading多线程模块 GIL锁 multiprocessing多进程模块 同步锁Lock 队列queue IO模型
线程与进程 进程 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成.我们编写的程序用来描述进程要完成哪些功能以及如何完成:数据集则是程序在执行过程中所需要 ...
- python-网络安全编程第六天(threading多线程模块&Queue模块&subprocess模块)
前言 昨天晚上9点多就睡了 2点起来没睡意... 那就学习吧emmmm ,拿起闲置几天的python课程学习.学习到现在5.58了 总结下 继续开始学习新的内容 多多线程? 线程(英语:thread) ...
- Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块
Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fab ...
- Python线程模块threading
线程,程序执行的最小单元,单线程处理多个任务只能一个处理完后继续处理下一个直到全部处理完,多线程处理任务会比单线程处理起来快吗?在python程序里得看情况,首先有GIL锁的存在导致同一时刻只能有一个 ...
- Python多线程模块
引言 thread threading 1 Thread 11 下面使用threading模块实现与上面相同的功能 12 在创建新线程时还可以给Thread传递可调用类的对象这样使用类本身来保存信息 ...
- 多线程模块的同步机制event对象
多线程模块的同步机制event对象 线程的核心特征就是他们能够以非确定的方式(即何时开始执行,何时被打断,何时恢复完全由操作系统来调度管理,这是用户和程序员无法确定的)独立执行的,如果程序中有其他线程 ...
- Python的多线程(threading)与多进程(multiprocessing )
进程:程序的一次执行(程序载入内存,系统分配资源运行).每个进程有自己的内存空间,数据栈等,进程之间可以进行通讯,但是不能共享信息. 线程:所有的线程运行在同一个进程中,共享相同的运行环境.每个独立的 ...
随机推荐
- Eclipse中Editor开启Auto-completion
Java Editor .abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ Java Script Editor 现在Eclipse限制使用最多 ...
- poj2018(高精度二分+dp)
题意:给你n个数,要你在这n个数里面找到一些连续的数,这些数的数量大于等于m,并且他们的平均值在这n个数里面是最大的....... 思路:先把n个数的最大最小值确定,然后二分枚举平均值,对于每一个连续 ...
- 章鱼哥出品—VB.NET DataGridView绑定数据源 "与货币管理器的位置关联的行不能设置为不可见" 问题的解决
DtaGridView绑定数据源后.假设想让数据条件显示的话,直接使用 My_Row.Visible = False就会出错.错误类型是 "与货币管理器的位置关联的行不能设置为不可见&qu ...
- Linux mdev 热拔插配置
在嵌入式领域使用比较多的是用 mdev 进行热插拔的操作. 文件系统进行配置 # 首先对 /etc/fstab 进行配置 # <file system> <mount pt> ...
- 4G模块ME3760_V2 端口映射
/dev/ttyUSB0 ECM // ECM 口 /dev/ttyUSB1 / //ECM口 /dev/ttyUSB2 AT ...
- [转]Python Web部署方式总结
学过PHP的都了解,php的正式环境部署非常简单,改几个文件就OK,用FastCgi方式也是分分钟的事情.相比起来,Python在web应用上的部署就繁杂的多,主要是工具繁多,主流服务器支持不足,在了 ...
- div绝对定位针对手机浏览器的区别
最近在对ipad和安卓平板做测试,发现我自己写的一个下拉控件在安卓浏览器里面被遮盖了,但是PC或者ipad都没有这个现象,一开始以为是z-index 可是无论我调多少都没有用,研究了好久,发现是代码的 ...
- SQL错误代码弹出提示信息类
截获SQL错误代码弹出提示信息类 Code:public class DBErrorCode{ /// <summary> /// 根据错误代码弹出错误提示 /// &l ...
- 【转】WebService 的创建,部署和使用
WebService,即Web服务,能使得运行在不同机器上的不同应用无须借助,专门的第三方软件或硬件,就可相互交换数据或集成. 第一次选择WebService,是为了替代数据库远程连接.我们都知道当S ...
- 第二百九十五节,python操作redis缓存-字符串类型
python操作redis缓存-字符串类型 首先要安装redis-py模块 python连接redis方式,有两种连接方式,一种是直接连接,一张是通过连接池连接 注意:以后我们都用的连接池方式连接,直 ...