python多进程和多线程一起使用_Python3多进程与多线程区别及使用(2.线程)
threading模块
简述:
threading模块
threading.currentThread(): 返回当前的线程变量。
threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
thread类
run(): 用以表示线程活动的方法。
start():启动线程活动。
join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
isAlive(): 返回线程是否活动的。
getName(): 返回线程名。
setName(): 设置线程名。
开启线程的两种方式:
一:
1 from threading importThread2
3
4 defsayhi(name):5 print('%s say hello' %name)6
7
8 if __name__ == '__main__':9 t = Thread(target=sayhi, args=('hh',))10 t.start()11 print('主线程')
二:
from threading importThreadimporttimeclassSayhi(Thread):def __init__(self,name):
super().__init__()
self.name=namedefrun(self):
time.sleep(2)print('%s say hello' %self.name)if __name__ == '__main__':
t= Sayhi('hh')
t.start()print('主线程')
线程同步:
使用 Thread 对象的 Lock 和 Rlock 可以实现简单的线程同步,这两个对象都有 acquire 方法和 release 方法,对于那些需要每次只允许一个线程操作的数据,可以将其操作放到 acquire 和 release 方法之间。
importthreadingimporttimeclassmyThread (threading.Thread):def __init__(self, threadID, name, counter):
threading.Thread.__init__(self)
self.threadID=threadID
self.name=name
self.counter=counterdefrun(self):print ("开启线程:" +self.name)#获取锁,用于线程同步
threadLock.acquire()
print_time(self.name, self.counter,3)#释放锁,开启下一个线程
threadLock.release()defprint_time(threadName, delay, counter):whilecounter:
time.sleep(delay)print ("%s: %s" %(threadName, time.ctime(time.time())))
counter-= 1threadLock=threading.Lock()
threads=[]#创建新线程
thread1 = myThread(1, "Thread-1", 1)
thread2= myThread(2, "Thread-2", 2)#开启新线程
thread1.start()
thread2.start()#添加线程到线程列表
threads.append(thread1)
threads.append(thread2)#等待所有线程完成
for t inthreads:
t.join()print ("退出主线程")
线程优先级队列( Queue)
Python 的 Queue 模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列 PriorityQueue。
这些队列都实现了锁原语,能够在多线程中直接使用,可以使用队列来实现线程间的同步。
Queue 模块中的常用方法:
Queue.qsize() 返回队列的大小
Queue.empty() 如果队列为空,返回True,反之False
Queue.full() 如果队列满了,返回True,反之False
Queue.full 与 maxsize 大小对应
Queue.get([block[, timeout]])获取队列,timeout等待时间
Queue.get_nowait() 相当Queue.get(False)
Queue.put(item) 写入队列,timeout等待时间
Queue.put_nowait(item) 相当Queue.put(item, False)
Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号
Queue.join() 实际上意味着等到队列为空,再执行别的操作
importqueueimportthreadingimporttime
exitFlag=0classmyThread (threading.Thread):def __init__(self, threadID, name, q):
threading.Thread.__init__(self)
self.threadID=threadID
self.name=name
self.q=qdefrun(self):print ("开启线程:" +self.name)
process_data(self.name, self.q)print ("退出线程:" +self.name)defprocess_data(threadName, q):while notexitFlag:
queueLock.acquire()if notworkQueue.empty():
data=q.get()
queueLock.release()print ("%s processing %s" %(threadName, data))else:
queueLock.release()
time.sleep(1)
threadList= ["Thread-1", "Thread-2", "Thread-3"]
nameList= ["One", "Two", "Three", "Four", "Five"]
queueLock=threading.Lock()
workQueue= queue.Queue(10)
threads=[]
threadID= 1
#创建新线程
for tName inthreadList:
thread=myThread(threadID, tName, workQueue)
thread.start()
threads.append(thread)
threadID+= 1
#填充队列
queueLock.acquire()for word innameList:
workQueue.put(word)
queueLock.release()#等待队列清空
while notworkQueue.empty():pass
#通知线程是时候退出
exitFlag = 1
#等待所有线程完成
for t inthreads:
t.join()print ("退出主线程")
python多进程和多线程一起使用_Python3多进程与多线程区别及使用(2.线程)相关推荐
- python多线程提高速度_Python3如何使用多线程升程序运行速度
优化前后新老代码如下: from git_tools.git_tool import get_collect_projects, QQNews_Git from threading import Th ...
- python3多线程异步爬虫_python3爬虫中多线程进行解锁操作实例
生活中我们为了保障房间里物品的安全,所以给门进行上锁,在我们需要进入房间的时候又会重新打开.同样的之间我们讲过多线程中的lock,作用是为了不让多个线程运行是出错所以进行锁住的指令.但是鉴于我们实际运 ...
- python 多线程实现多任务,多进程实行多任务
目录 1 多线程实现多任务 1.1 什么是线程? 1.2 一个程序实现多任务的方法 1.3 多线程的创建方式 1.3.1 创建threading.Thread对象 1.3.2 继承threading. ...
- python多线程效率低_Python 多进程、多线程效率比较
Python 界有条不成文的准则: 计算密集型任务适合多进程,IO 密集型任务适合多线程.本篇来作个比较. 通常来说多线程相对于多进程有优势,因为创建一个进程开销比较大,然而因为在 python 中有 ...
- python爬虫02-提升爬取效率、多线程,多线程传参,多进程,线程及线程池概念,协程,多任务异步协程,异步请求aiohttp模块,视频站工作原理
1.提升爬取效率 使用多线程,多进程,携程,异步 2.多线程 进程是资源单位,每个进程,都会有一个默认的主线程 线程是执行单位 执行多线程需要导包: from threading import Thr ...
- 什么时候用多线程什么时候用多进程呢?GUL
那么在 Python 中什么时候用多线程什么时候用多进程呢?当在CPU-bound(计算密集型:绝大多数时间在计算) 时最好用 - 多进程, 而在 I/O bound(I/O密集型 : IO 处理 并 ...
- python多进程反而慢_python 3.6 多进程的坑
python 慢是事实, 但是你如果想让他快,使用cpython 也可以,但是前提在你不使用第三方包的情况下,你要用了numpy pandas ,cython 就无法使用了,那只有 使用python的 ...
- python爬虫多进程_Python爬虫技术--基础篇--多进程
要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识. Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊.普通的函数调用,调用一次,返回 ...
- python多进程map比apply快_python 多进程读写 map
要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识. Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊.普通的函数调用,调用一次,返回 ...
最新文章
- 基于Socket的UDP和TCP编程介绍
- 单片机sleep函数的头文件_单片机学习day8—单片机IO扩展
- 宏碁电脑开启虚拟化技术_开启windows电脑的cpu虚拟化(VT)图文操作步骤
- 爬虫学习笔记(十一)—— Scrapy框架(六):媒体管道
- python写前端代码_哪种ide能同时写java和前端代码?
- java.lang.NumberFormatException: For input string: “xxxx.“
- 数据结构算法 二进制转十进制_数据结构 - 栈
- python图像线条提取_python3 图像细化(提取骨架线)
- Python2.7和3.6之间的区别
- Diagnostics: File file:/tmp/spark-***/__spark_libs__***.zip does not exist
- c# json转换实例
- 程序员理想的工作环境应该是怎样的?
- css制作 平行四边形和梯形导航条
- 江西计算机竞赛有哪些,江西自主招生认可的竞赛有哪些
- 《测绘综合能力》——海洋测绘
- HDU 2022 海选女主角
- 计算机北大核心期刊不要审稿费,这些核心医学期刊不收取审稿费(建议收藏)...
- Xcode下载地址 官网地址,无毒无害
- ios swift view父视图(半)透明,子视图不透明
- 【FASTDFS】fastdfs上传文件报错 org.csource.common.MyException: getStoreStorage fail, errno code: 28 解决方法
热门文章
- 如何在 ASP.NET Core 中 自定义中间件
- Istio 中的授权策略详解
- .NET 5.0 Preview 2发布解析
- .Net Core2.1 秒杀项目一步步实现CI/CD(Centos7)系列二:k8s高可用集群搭建总结以及部署API到k8s...
- 从零开始在 Windows 上部署 .NET Core 到 Kubernetes
- ASP.NET Core 3.0 自动挡换手动挡:在 Middleware 中执行 Controller Action
- 讨论.NET Core 配置对GC 工作模式与内存的影响
- [ASP.NET Core] Middleware
- Connect 大会的主题 ---微软大法好
- JetBrains 加入 .NET 基金会