python多线程编程_Python 多线程编程

Thread类

classThread:def __init__(self,group=None,target=None,name=None,args=(),kwargs=None,*,daemon=None)

group:None,为日后扩展 ThreadGroup 类实现而保留。

target:run() 方法调用的目标函数。

name:线程名。默认值为Thread-N。

args:传递给目标函数的位置参数元组。

kwargs:传递给目标函数的关键字参数字典。

daemon:守护线程。

Thread类的常用方法和属性

start():启动线程,在一个线程里最多只能被调用一次。

run():调用 target 传递的目标函数,并从 args 和 kwargs 分别获取的位置和关键字参数。

name:线程名。

getName():获取线程名。

setName():设置线程名。

ident:线程标识符,是个非零整数。如果线程尚未启动则为None。

daemon:是否是守护线程的布尔值,默认为False。

isDaemon():返回线程是否是守护线程。

setDaemon():设置线程为守护线程。

join([time]):阻塞调用该方法的线程,直到被调用该方法的线程结束或超时。

is_alive():返回线程是否存活。

threading模块常用方法和属性

active_count():返回当前存活的 Thread 对象的计数。

enumerate():以列表形式返回当前存活的 Thread 对象。

current_thread():返回当前对应调用者的控制线程的 Thread 对象。

main_thread():返回主 Thread 对象。

get_ident():返回当前线程的"线程标识符"。

创建线程

可调用对象传递给构造函数

重写子类的 run() 方法

1. 可调用对象传递给构造函数

importthreadingimporttimedeffunc(n):print("task", n)

time.sleep(2)for i in range(2):

t= threading.Thread(target=func, args=(i,)) #创建线程

t.start() #启动线程

2. 重写子类的 run() 方法

importthreadingimporttimeclassMyThread(threading.Thread):def __init__(self, n):

super().__init__()

self.n=ndefrun(self):print("task", self.n)

time.sleep(2)for i in range(2):

t=MyThread(i)

t.start()

全局解释器锁

全局解释器锁(Global Interpreter Lock,简称GIL),是计算机程序设计语言解释器用于同步线程的工具,使得在同一进程内任何时刻仅有一个线程在执行。即使在多核CPU平台上,同一时刻也只有一个获得GIL的线程在执行,其他线程处于阻塞状态。

CPython使用操作系统的原生线程,由操作系统负责调度。

每个解释器进程有唯一的主线程和用户定义的任意数量子线程。

每个解释器进程有且仅有一个GIL,当解释器启动时,主线程获取GIL。

线程执行前要先获取GIL,当遇到I/O操作时释放GIL。

线程锁

原始锁处于"锁定"或者"非锁定"状态,被创建时是非锁定状态。它有两个基本方法:acquire(),release()。

当状态是非锁定时,线程调用 acquire() 获取锁,并阻塞其他线程,直到锁被释放,将状态修改为锁定。

当状态是锁定时,任何线程都可以调用 release() 释放锁,将状态修改为非锁定。

importthreadingimporttime

lock=threading.Lock()deffunc(n):

lock.acquire()#获取锁

print("task", n)

lock.release()#释放锁

time.sleep(2)for i in range(2):

t= threading.Thread(target=func, args=(i,))

t.start()

信号量

信号量管理一个内部计数器,调用 acquire() 方法时计数器-1,调用 release() 方法时计数器+1。当计数器为0时将会阻塞,直到线程调用 release() 方法。

importthreadingimporttime

semaphore= threading.BoundedSemaphore(2)deffunc(n, se):

se.acquire()print("task", n)

time.sleep(2)

se.release()for i in range(2):

t= threading.Thread(target=func, args=(i,semaphore))

t.start()

事件

事件是线程之间的一种通信机制:一个线程发出事件信号,其他线程等待该信号。

事件对象管理一个内部标志Flag,初始为false。调用 set() 方法可将其设置为 true,调用 clear() 方法可将其设置为false,调用 wait() 方法将阻塞线程直到标志为 true。

importthreadingimporttime

event=threading.Event()deffunc():print(threading.current_thread().getName(), "ready")

time.sleep(3)

event.wait()print(threading.currentThread().getName(), "go")for i in range(2):

t= threading.Thread(target=func)

t.start()print("Ready?Go!")

event.set()

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

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

相关文章

linux修改网卡名(亲测有效)

1查看网卡ip addr 2cd /etc/sysconfig/network-scripts Ls查看 3mv ifcfg-eno16777736 ifcfg-eth0重命名,然后编辑 最后一行加入IPADDR192.168.30.136 NETMASK255.255.255.0 HWADDR00:0C:29:aa?2f BOOTPROTO改成static 4 vi /etc/default/grub 5 grub2-mkconfig…

java 存储空间_Java中的存储空间类型

在Thinking in java里,列举了Java的六种存储类型1.寄存器编写过汇编程序的应该对寄存器非常熟悉,那时候用的ax,bx,cx,dx等等。寄存器在CPU里面,所以速度特别快,但是数量非常有限。在java中无法直…

读取html文件,让其中的内容和notepad打开这个html的样子一样。

然后我写了个python代码,让其读取这个html文件后,内容和这个一样: htmlfopen(13144815898.html,r,encoding"utf-8") htmlconthtmlf.read() print((htmlcont)) 转载于:https://www.cnblogs.com/www-caiyin-com/p/9447285.html

python默认参数举例_Python中的默认参数实例分析

本文研究的主要是Python中的默认参数的相关内容,具体如下。熟悉C语言的可以知道,C语言中的默认参数是写在函数声明中的,为语法糖,与函数的调用无关,是在函数调用的时候由编译器补齐参数然后进行调用。而Python中的默认…

centos安装ipconfig和telnet命令

1我安装的是mini版的 2首先ipconfig查看不到命令 yum -y install net-tools 解决 3在同事的要求下要安装telnet 首先 rpm -qa telnet-server yum -y install telnet-server rpm -qa telnet yum -y install telnet rpa -qa xinetd yum -y install xinetd 测试 netstat -tnl …

java 对象访问权限_Java面向对象编程之访问控制权限

5. 访问控制权限5.1 类型(4个)privatepublicprotected默认权限5.2 作用private : 私有的,只能类内部访问public : 可以在任何位置访问,类内部访问,对象访问protected: 被本类,和本类的子类访问默认权限:可以…

38. 统计一个整数的二进制表示中bit为1的个数

参考: https://www.cnblogs.com/graphics/archive/2010/06/21/1752421.html 转载于:https://www.cnblogs.com/GrimMjxCl/p/9452667.html

python3.7怎么使用arcpy_从Python到空间分析Arcpy|1.3.7 神啊!救救我之如何处理报错...

今天讲的是关键时候不卡壳的技能,尤其是循环语句中和数据清洗中,先假设一种情况,领导安排你把,某机构给你们的坐标x和y数据列表中的每个元素的x偏移3个单位,假设你现在已经可以掌握相关的内容了,心里想太ea…

dockerfile使用(一)

1mkdir dl Cd dl Touch Dockerfile 2修改配置vi Dockerfile FROM alpine:latest MAINTAINER xbf CMD echo ‘hello docker’ 3 docker build -t hello_docker . 4 docker images 5 docker run hello_docker

java程序设计实验报告册_20145215《Java程序设计》实验一实验报告

实验一 Java开发环境的熟悉实验内容及步骤使用JDK编译、运行简单的Java程序命令行下程序开发:在命令行下建立实验目录,进入该目录后创建exp1目录敲入以下代码:package exp1;import java.util.Scanner;public class Hello{public static void …

异步汇合

//多个异步请求完成后汇总结结果(任务执行不区分先后顺序) dispatch_queue_t queue dispatch_get_global_queue(0,0); dispatch_group_t group dispatch_group_create(); dispatch_group_async(group, queue, ^{/*任务a */ }); dispatch_group_async(g…

dockfile应用(二)

1创建目录dl2 Cd dl2 Touch dockerfile Touch index,html 2ROM ubuntu MAINTAINER xbf RUN sed -i ‘s/archive.ubuntu.com/mirrors.ustc.edu.cn/g’ /etc/apt/sources.list RUN apt-get update RUN apt-get install -y nginx COPY index.html /var/www/html ENTRYPOINT [&quo…

python实验九答案_Python实验九

安徽工程大学python程序设计实验报告班级:物流191 姓名:王悦 学号:3190505103 日期:2020.6.16 指导老师:修宇【实验名称】实验九python包管理【实验目的】进一步了解python的计算生态,…

java gb13000_浅谈 GB13000

引言我前几天写了一篇随笔“随机生成常用汉字(再次改进版)”。园友“菜菜灰”评论说“看着太累,不认识的字还是多,代码也很多,几段代码显示2万多汉字”,并给出了相应的 C# 代码:1 System.Text.StringBuilder sb newSy…

元素的移动

我的想法: 1.首先给移动的元素一个绝对定位,position: absolute, 通过top和left来实现元素的移动。 2. 基本过程:(1)当鼠标的左键按下去时,给元素添加onmousemove, onmouseleave(鼠标不在元素上时, 移除onmousemove事件…

python打开csv文件、计算总成绩_实现读取csv文件,文件里面是有限个百分数成绩(99.6、76.8等等...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼实现读取csv文件,文件里面是有限个百分数成绩(99.6、76.8等等)导出GPA 和等级代码是这样,但是报错了,在score float(sc)这行就报错了,下面有没有错误还不知道,大佬能帮看…

json java typeof_Json对象与Json字符串的转化、JSON字符串与Java对象的转换

一.Json对象与Json字符串的转化1.jQuery插件支持的转换方式:$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象2.浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9&#xff…

Fiddler 学习笔记---命令、断点

输入命令框&#xff1a; 1 输入 &#xff1f;51testing 高亮显示对应记录 2 >10 选择body大于10的记录 3 <10 选择body<10的记录 4 200 选择result200的记录行 5 www.51testing.com 选择host包含www.51testing.com的记录 6 select image 选择 content-type 包含image…

docker Registry镜像仓库

docker search whalesay搜索 2docker pull docker/whalesay 拉取镜像 3docker ps 4docker run docker/whalesay cowsay Docker不错 5docker tag docker/whalesay xibeifeng/whalesay docker images 6登录hub官网 可以 docker push xibeifeng/whalesay上传咯

java中的集合框架_JAVA中的集合框架(上)List

第一节 JAVA中的集合框架概述集合的概念&#xff0c;现实生活中&#xff1a;很多事物凑在一起就是一个集合&#xff1b;数学中的集合&#xff1a;具有相同属性事物的总体&#xff1b;JAVA中的集合&#xff1a;是一种工具类&#xff0c;就像是容器&#xff0c;储存任意数量的具有…