python的threading是什么意思_Python中的threading模块是什么

threading提供了一个比thread模块更高层的API来提供线程的并发性。这些线程并发运行并共享内存。

下面来看threading模块的具体用法:

一、Thread的使用,目标函数可以实例化一个Thread对象,每个Thread对象代表着一个线程,可以通过start()方法,开始运行。

这里对使用多线程并发,和不适用多线程并发做了一个比较:

首先是不使用多线程的操作:

代码如下:#!/usr/bin/python

#compare for multi threads

import time

def worker():

print "worker"

time.sleep(1)

return

if __name__ == "__main__":

for i in xrange(5):

worker()

执行结果如下:

下面是使用多线程并发的操作:

代码如下:#!/usr/bin/python

import threading

import time

def worker():

print "worker"

time.sleep(1)

return

for i in xrange(5):

t = threading.Thread(target=worker)

t.start()

可以明显看出使用了多线程并发的操作,花费时间要短的很多。

二、threading.activeCount()的使用,此方法返回当前进程中线程的个数。返回的个数中包含主线程。

代码如下:#!/usr/bin/python

#current's number of threads

import threading

import time

def worker():

print "test"

time.sleep(1)

for i in xrange(5):

t = threading.Thread(target=worker)

t.start()

print "current has %d threads" % (threading.activeCount() - 1)

三、threading.enumerate()的使用。此方法返回当前运行中的Thread对象列表。

代码如下:#!/usr/bin/python

#test the variable threading.enumerate()

import threading

import time

def worker():

print "test"

time.sleep(2)

threads = []

for i in xrange(5):

t = threading.Thread(target=worker)

threads.append(t)

t.start()

for item in threading.enumerate():

print item

print

for item in threads:

print item

四、threading.setDaemon()的使用。设置后台进程。

代码如下:#!/usr/bin/python

#create a daemon

import threading

import time

def worker():

time.sleep(3)

print "worker"

t=threading.Thread(target=worker)

t.setDaemon(True)

t.start()

print "haha"

可以看出worker()方法中的打印操作并没有显示出来,说明已经成为后台进程。

threading.Thread

Thread 是threading模块中最重要的类之一,可以使用它来创建线程。有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入。下面分别举例说明。先来看看通过继承threading.Thread类来创建线程的例子:#coding=gbk

import threading, time, random

count = 0

class Counter(threading.Thread):

def __init__(self, lock, threadName):

'''@summary: 初始化对象。

@param lock: 琐对象。

@param threadName: 线程名称。

'''

super(Counter, self).__init__(name = threadName)

#注意:一定要显式的调用父类的初始

化函数。

self.lock = lock

def run(self):

'''@summary: 重写父类run方法,在线程启动后执行该方法内的代码。

'''

global count

self.lock.acquire()

for i in xrange(10000):

count = count + 1

self.lock.release()

lock = threading.Lock()

for i in range(5):

Counter(lock, "thread-" + str(i)).start()

time.sleep(2)

#确保线程都执行完毕

print count

在代码中,我们创建了一个Counter类,它继承了threading.Thread。初始化函数接收两个参数,一个是锁对象,另一个是线程的名称。在Counter中,重写了从父类继承的run方法,run方法将一个全局变量逐一的增加10000。在接下来的代码中,创建了五个Counter对象,分别调用其start方法。最后打印结果。这里要说明一下run方法 和start方法: 它们都是从Thread继承而来的,run()方法将在线程开启后执行,可以把相关的逻辑写到run方法中(通常把run方法称为活动[Activity]。);start()方法用于启动线程。

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

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

相关文章

【学习笔记】《The Linux Command Line》第一部分 1 - 11 章(shell、进程、重定向、命令等)

《The Linux Command Line》读书笔记 文章目录《The Linux Command Line》读书笔记第一章 略第二章 Shell第三章 文件系统第四章 探究OS第五章 操作文件和目录第六章 使用命令第七章 重定向第八章 Shell第九章 快捷键第十章 权限第十一章 进程第一章 略 第二章 Shell Shell: …

md5值是什么意思_详解:PER?霍林格效率值?这个最火的高阶数据究竟是什么意思?...

北京时间6月19日我们以前看球的时候,不关心什么高阶数据,顶多就是在聊天讨论的时候用得分、篮板、助攻、抢断、盖帽等数据来说事,但打内心更喜欢的是一场完整的比赛中的一些能够让人肾上腺素飙升的东西。后来就有人开始罗列数据,把…

【学习笔记】单例模式(枚举、校验锁、volatile、反射破坏)

文章目录1. 饿汉式2. 懒汉式3. DCL 双重校验锁懒汉式4. 通过反射破坏DCL & 加锁阻止5. 通过不调用 getInstance() 来破坏单例6. 通过反射来干扰信号量,从而破坏单例7. 通过枚举类实现单例,可以防止反射破坏单例学 JUC 的时候顺便摸了下单例模式&…

go 连接服务器 并存放图片_基于 Go 语言开发在线论坛(二):通过模型类与MySQL数据库交互...

在这篇教程中,我们将在 MySQL 中创建一个 chitchat 数据库作为论坛项目的数据库,然后在 Go 项目中编写模型类与之进行交互。你可以本地安装 MySQL 数据库,也可以基于 Docker 容器运行(后续会介绍容器化启动方法)。1、项目初始化开始之前&…

dax 筛选 包含某个字_DAX分享9:DAX中用变量来计算动态filter context中数值

文章写起来真的也挺麻烦的。坚持坚持!加油加油!本次分享的需求描述如下:在Power BI中创建一个页面,页面显示一个Table和两个Slicer。其中Slicer的内容也列在Table里。Table里需要一个计算值,这个计算值要求对Table中的…

c++怎么实现数字数组的删除数字_C/C++数据结构:栈结构解析,最简单解析,让你一遍就会...

上一章节针对于C语言最基本的数据结构链式结构体做了解析,不清楚的可以回顾一下。本章节主要针对于C语言的基础数据结构栈做以解析。数据结构之栈栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶…

【总结记录】面向对象设计OOP三大特性(封装、继承、多态)、七大基本原则的理解(结合代码、现实实例理解)

文章目录一. 三大特征的理解(1)封装(2)继承(3)多态(4)面向对象、面向过程的对比二. 七大基本原则的理解(1)单一职责原则(2)开放封闭原…

mysql 递归查找父节点_MYSQL递归查询所有父节点

1、表结构:CREATE TABLE t_busi_system (ID varchar(64) NOT NULL COMMENT 标识,PARENT_ID varchar(64) DEFAULT NULL COMMENT 父id,CREATE_DATE varchar(64) DEFAULT NULL COMMENT 创建时间,CREATE_USER_ID varchar(64) DEFAULT NULL COMMENT 创建人id,CREATE_USER…

arcmap shp导出cad无反应_如何使用ArcMap将Excel数据转换为shp数据

1. 概述对ArcMap而言,除了shapefile等数据源,还可以将包含地理位置的表格数据以 XY 坐标的形式添加到地图中,比如Excel格式的数据,如果包含有坐标数据在里面,就可以通过导入XY数据的方式将Excel数据导入,最…

【总结记录】《MySQL必知必会》读后笔记,结合 leetcode 例题理解

文章目录一. 《MySQL知会》读后笔记1. 零散的前文知识2. 连接数据库3. 检索数据(重点开始了)4. 排序、过滤数据5. 通配符、正则表达式6. 汇总数据7. 分组数据(1)GROUP BY(数据分组)(2&#xff0…

新松机器人发行价_知识创造财富,“机器人第一股”背后的院士是怎样炼成的?...

‍*本文原创首发于微信公众号“德先生”,未经授权转载必究。机器人的研发、制造、应用,是衡量一个国家科技创新和高端制造业水平的重要标志。上世纪70年代,我国机器人刚刚起步,如今,中国自主品牌机器人依靠技术创新&am…

如何使用CNN进行物体识别和分类_RCNN物体识别

R-CNN,图片识别目标检测(Object Detection)是图像分类的延伸,除了分类任务,还要给定多个检测目标的坐标位置。R-CNN是最早基于CNN的目标检测方法,然后基于这条路线依次演进出了SPPnet,Fast R-CNN和Faster R-CNN,然后到…

python如何不跳行打印_python怎么不换行打印

Python2.7中,执行完print后,会自动换行,如下代码会打印:abc\n123\n(其中\n代表换行)print (abc)print (123)如何实现不换行打印字符呢,下面介绍Python2.7中 实现不换行打印字符的3种简单方法:1.在print函数…

【LeetCode 总结】Leetcode 题型分类总结、索引与常用接口函数

文章目录零. Java 常用接口函数一. 动态规划二. 链表三. 哈希表四. 滑动窗口五. 字符串六. DFS、BFS七. 二分法八. 二叉树九. 偏数学、过目不忘 and 原地算法等十. 每日一题前言: 是时候开一个对于我的 LeetCode 专栏的总结索引了 虽然说大概只刷了150道左右&#…

nfs服务器_Kubernetes集群下部署NFS持久存储

NFS是网络文件系统Network File System的缩写,NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地的文件系统中,而在本地的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样。kubernetes使用NFS共享存储有两种方式&…

c语言 指针_C 语言指针详解

(给CPP开发者加星标,提升C/C技能)作者:C语言与CPP编程 / 自成一派123(本文来自作者投稿)1为什么使用指针假如我们定义了 char a’A’ ,当需要使用 ‘A’ 时,除了直接调用变量 a ,还可以定义 char *p&a &#xff0c…

kettle 插入更新 数据增量_使用Kettle工具进行增量数据同步

增量同步的方式有很多种,我使用的是: 快照表 触发器需求:当主库库表发生增删改时,从库库表与主库库表数据保持一致。环境:1、Mysql2、kettle 7.1思路:1、在主库中,将需要同步的库表新建快照表,…

idea修改代码后不重启项目_使用DevTool实现SpringBoot项目热部署

前言最近在开发的时候,每次改动代码都需要启动项目,因为有的时候改动的服务比较多,所以重启的次数也就比较多了,想着每次重启等待也挺麻烦的,就打算使用DevTools工具实现项目的热部署热部署是什么大家都知道在项目开发…

vue 计算文件hash值_vue的hash值原理,也是table切换。

.pages>div{display: none;}aaabbbcccc首页关于我的页面用户中心//hash 和页面一一对应起来//router 配置var router [{path:"/",component:document.getElementById("home")},{path:"/about",component:document.getElementById("abou…

c++ 单例模式_Redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比

redis作为一种高效的缓存框架,使用是非常广泛的,在数据存储上,在运行时其将数据存储在内存中,以实现数据的高效读写,并且根据定制的持久化规则不同,其会不定期的将数据持久化到硬盘中。另外相较于其他的NoS…