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.线程)相关推荐

  1. python多线程提高速度_Python3如何使用多线程升程序运行速度

    优化前后新老代码如下: from git_tools.git_tool import get_collect_projects, QQNews_Git from threading import Th ...

  2. python3多线程异步爬虫_python3爬虫中多线程进行解锁操作实例

    生活中我们为了保障房间里物品的安全,所以给门进行上锁,在我们需要进入房间的时候又会重新打开.同样的之间我们讲过多线程中的lock,作用是为了不让多个线程运行是出错所以进行锁住的指令.但是鉴于我们实际运 ...

  3. python 多线程实现多任务,多进程实行多任务

    目录 1 多线程实现多任务 1.1 什么是线程? 1.2 一个程序实现多任务的方法 1.3 多线程的创建方式 1.3.1 创建threading.Thread对象 1.3.2 继承threading. ...

  4. python多线程效率低_Python 多进程、多线程效率比较

    Python 界有条不成文的准则: 计算密集型任务适合多进程,IO 密集型任务适合多线程.本篇来作个比较. 通常来说多线程相对于多进程有优势,因为创建一个进程开销比较大,然而因为在 python 中有 ...

  5. python爬虫02-提升爬取效率、多线程,多线程传参,多进程,线程及线程池概念,协程,多任务异步协程,异步请求aiohttp模块,视频站工作原理

    1.提升爬取效率 使用多线程,多进程,携程,异步 2.多线程 进程是资源单位,每个进程,都会有一个默认的主线程 线程是执行单位 执行多线程需要导包: from threading import Thr ...

  6. 什么时候用多线程什么时候用多进程呢?GUL

    那么在 Python 中什么时候用多线程什么时候用多进程呢?当在CPU-bound(计算密集型:绝大多数时间在计算) 时最好用 - 多进程, 而在 I/O bound(I/O密集型 : IO 处理 并 ...

  7. python多进程反而慢_python 3.6 多进程的坑

    python 慢是事实, 但是你如果想让他快,使用cpython 也可以,但是前提在你不使用第三方包的情况下,你要用了numpy pandas ,cython 就无法使用了,那只有 使用python的 ...

  8. python爬虫多进程_Python爬虫技术--基础篇--多进程

    要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识. Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊.普通的函数调用,调用一次,返回 ...

  9. python多进程map比apply快_python 多进程读写 map

    要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识. Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊.普通的函数调用,调用一次,返回 ...

最新文章

  1. 基于Socket的UDP和TCP编程介绍
  2. 单片机sleep函数的头文件_单片机学习day8—单片机IO扩展
  3. 宏碁电脑开启虚拟化技术_开启windows电脑的cpu虚拟化(VT)图文操作步骤
  4. 爬虫学习笔记(十一)—— Scrapy框架(六):媒体管道
  5. python写前端代码_哪种ide能同时写java和前端代码?
  6. java.lang.NumberFormatException: For input string: “xxxx.“
  7. 数据结构算法 二进制转十进制_数据结构 - 栈
  8. python图像线条提取_python3 图像细化(提取骨架线)
  9. Python2.7和3.6之间的区别
  10. Diagnostics: File file:/tmp/spark-***/__spark_libs__***.zip does not exist
  11. c# json转换实例
  12. 程序员理想的工作环境应该是怎样的?
  13. css制作 平行四边形和梯形导航条
  14. 江西计算机竞赛有哪些,江西自主招生认可的竞赛有哪些
  15. 《测绘综合能力》——海洋测绘
  16. HDU 2022 海选女主角
  17. 计算机北大核心期刊不要审稿费,这些核心医学期刊不收取审稿费(建议收藏)...
  18. Xcode下载地址 官网地址,无毒无害
  19. ios swift view父视图(半)透明,子视图不透明
  20. 【FASTDFS】fastdfs上传文件报错 org.csource.common.MyException: getStoreStorage fail, errno code: 28 解决方法

热门文章

  1. 如何在 ASP.NET Core 中 自定义中间件
  2. Istio 中的授权策略详解
  3. .NET 5.0 Preview 2发布解析
  4. .Net Core2.1 秒杀项目一步步实现CI/CD(Centos7)系列二:k8s高可用集群搭建总结以及部署API到k8s...
  5. 从零开始在 Windows 上部署 .NET Core 到 Kubernetes
  6. ASP.NET Core 3.0 自动挡换手动挡:在 Middleware 中执行 Controller Action
  7. 讨论.NET Core 配置对GC 工作模式与内存的影响
  8. [ASP.NET Core] Middleware
  9. Connect 大会的主题 ---微软大法好
  10. JetBrains 加入 .NET 基金会