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 ("退出主线程")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ruby如何成长成高性能系统构架

为什么80%的码农都做不了架构师?>>> 结束了一份Ruby为主的工作,想把个方面总结一下,这篇是关于系统性能方面的.以下数据都是简单回忆的数据,加之企业保密数据的需要,和精确数有些出入,仅供参考. 说起Ruby的性能,无论从官方到社区,都公认是劣于其它的框架…

Android之build.gradle配置签名

1 问题 android签名除了我们用android studio build->generate Signed Apks ... 我们还可以自己用build.gradle构建,容易忘记还是记录下来 2 配置如下 1) build.gradle文件如下 android {...signingConfigs {release {def prpe = new Properties()def input = project.…

ArcGIS 10.2数字化线状要素时自动拼接成一条线

(1)在已有线的基础上自动连接成一条线 数字化时,经常会碰到这种情况,不小心双击了,或者画到一半饿了,双击完成去吃饭了,回来继续画,该怎样去做呢? 一开始一直和捕捉和经典…

Python 字符串操作基础

1.Python 字符串 字符串可以看做是由单个文本字符构成的列表,每个字母构成一个列表元素,可以用下标取值,切片,用于for循环,用len()函数 name Zophoie name[2] name[-3] name[0:3]Zoin nameZOin name len(name)ZOOnot …

设置tableView的分割线从最左端开始

苹果原生的tableView的cell分割线默认是没有从最左端开始,有时候这样不免影响美观,有时也会有这样的需求,设置tableView的分割线从最左端开始: 不多说了,直接上代码吧: //分割线从顶端开始 --------适配iO…

java 定时 spring_Spring定时任务实现与配置(一)

朋友的项目中有点问题。他那边是Spring架构的,有一个比较简单的需要定时的任务执行。在了解了他的需求之后,于是提出了比较简单的Springquartz的实现方式。注意本文只是讨论,在已搭建完毕的Spring工程下,完成最简单的定时任务。第…

内核同步机制

内核中用于临界区保护下的互斥机制,它包括自旋锁、原子操作和信号量,三者保证了对临界资源访问的互斥型。 1.1 内核中的互斥机制 1.1.1 自旋锁 自旋锁用在多个CPU系统中。当一个线程在一个CPU上正使用资源,而另一个线程在另一个CPU上正忙等待…

makefile运行_NVDIA TX2入门 系列之三:运行Yolov3

上篇TX2安装完成OpenCV 3.4.0之后,基本软件包已经安装完成,本篇开始安装并运行大名鼎鼎的号称速度最快的目标识别分类算法Yolov3。Yolov3 是啥啊Yolov3是一款基于darknet深度学习框架的目标检测开源项目,目前已经发展到第3版本,即…

.NET7之MiniAPI(特别篇):.NET7 Preview3

.NET7的第三个预览版发布了,同样带来了mini api的更新,这次带来了路由过滤器,与mvc版的action 过滤器相似。具体见https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-7-preview-3/用官方的代码,跑不起来&…

C#实现树的双亲表示法

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace 树的实现 {public partial class Form1 : Form{public Form1(){Init…

C++编译之提示ld: can‘t open output file for writing: test1, errno=21 for architecture x86_64

1 问题 在mac 终端写了一个cpp文件,然后用命令编译运行提示错误如下 1111deMBP:code a1111$ g -stdc11 test1.cpp -o test1 ld: cant open output file for writing: test1, errno21 for architecture x86_64 clang: error: linker command failed with exit code…

MySQL存储写入速度慢分析

一、存储结构分析MySQL存储结构图:解析:1、读操作:内存读-->cache缓存读-->磁盘物理读读取到的数据会按上述顺序往回送。2、写操作:内存数据直接写入cache缓存(非常快)-->写入disk由上可知,MySQL之所以读写速…

windows 建立wifi热点

1、以管理员身份运行命令提示符:netsh wlan set hostednetwork modeallow ssidmywifi key123456其中ssid为wifi名称,key为wifi密码。2、设置Internet连接共享:在“网络连接”窗口中,右键单击已连接到Internet的网络连接&#xff0…

【C语言简单说】一:第一个C语言程序

注册CSDN有些年头了,但是从未写过任何任何的东西。 几年前的懵懵懂懂,现在虽然依旧懵懂但是还好,能够听得懂大触们大致再说神马东西了。 这段时间有点怀疑人生,由于本人才疏学浅,所以只好留下一点帮助小白级入门的干货…

腾讯视频VIP会员,周卡特价9元!腾讯官方直充,会员立即生效!

腾讯视频新剧热播,但去广告必须是腾讯视频VIP会员,今天就给大家推荐特价充值腾讯视频VIP会员的平台——幻海优品,官方在线直充,会员秒到!腾讯视频VIP会员特价充值周卡:原价12元,特价9元月卡&…

google+stackoverflow_哪些开发问题最让程序员“头秃”?我们分析了Stack Overflow的11000个问题...

作者 | Nick Roberts编译 | AI科技大本营(ID:rgznai100)自 2008 年成立以来,Stack Overflow 一直在拯救所有类型的开发人员。自那时以来,开发人员提出了数百万个关于开发领域的问题。但是,迫使开发者转向 Stack Overflow 的问题都是什么呢&am…

Android 中的接口回调

Android 中的接口回调转载于:https://www.cnblogs.com/zhujiabin/p/5223806.html

java 获取接口的注解_java反射注解妙用-获取所有接口说明

前言最近在做项目权限,使用shiro实现restful接口权限管理,对整个项目都进行了重构。而权限管理需要用到所有的接口配置,包括接口url地址,接口唯一编码等。想要收集所有的接口信息,如果工程接口很多,工作量可想而知。这…

C#窗体的Load事件与Shown事件的区别

Load&#xff1a;在第一次显示窗体前发生。 <pre name"code" class"csharp"> private void Form1_Load(object sender, EventArgs e){} Shown&#xff1a;只有在首次显示窗体时才会引发 Shown 事件&#xff1b;随后执行的最小化、最大化、还原、隐藏…

在CentOS7.0上制作openstack-juno本地yum源 .doc

在CentOS7.0上制作openstack-juno本地yum源参考文献&#xff1a; 2014/09/27 | http://www.kekeyun.net/?p222可可云计算网以http://www.kekeyun.net/?p222文为参考&#xff0c;在CentOS7.0上制作本地源&#xff0c;过程如下&#xff1a;一、创建CentOS7虚拟主机安装过程有…