python 线程 的类库_python类库32[多线程]

一 python 多线程

因为CPython的实现使用了Global Interpereter Lock(GIL),使得python中同一时刻只有一个线程在执行,从而简化了python解释器的实现,且python对象模型天然地线程安全。如果你想你的应用程序在多核的机器上使用更好的资源,建议使用multiprocessing或concurrent.futures.processpoolexecutor。但是如果你的程序是IO密集型,则使用线程仍然是很好的选择。

二 python 多线程使用的两种方法

实例:

import threading

import time

def worker(num):

print (threading.currentThread().getName() + 'start')

time.sleep(10)

print (threading.currentThread().getName() + 'running')

print (threading.currentThread().getName() + "" + str(num))

print (threading.currentThread().getName() + 'exit')

def deamon():

print (threading.currentThread().getName() + 'start')

time.sleep(20)

print (threading.currentThread().getName() + 'running')

print (threading.currentThread().getName() + 'exit')

print(threading.currentThread().getName())

d = threading.Thread(name='deamon', target=deamon)

d.setDaemon(True)

d.start()

w = threading.Thread(name='worker', target=worker, args=(10,))

w.start()

class myWorker(threading.Thread):

def __init__(self, num):

threading.Thread.__init__(self)

self.num = num

self.thread_stop = False

def run(self):

print (self.getName()+'start')

time.sleep(30)

print (self.getName()+'running')

print (self.getName()+"" + str(self.num))

print (self.getName()+'exit')

mw = myWorker(30)

mw.setName("MyWorker")

mw.start()

print(threading.currentThread().getName())

print("All threads:")

print("------------")

for th in threading.enumerate():

print(th.getName())

print("------------")

d.join()

w.join()

mw.join()

print(threading.currentThread().getName())

运行结果如下:

5d2e10d250e53291ef0e9dff94b0a3f2.png

1)python线程使用的两种方法:

**直接调用threading.Thread来构造thread对象,Thread的参数如下:

class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})

group为None;

target为线程将要执行的功能函数;

name为线程的名字,也可以在对象构造后调用setName()来设定;

args为tuple类型的参数,可以为多个,如果只有一个也的使用tuple的形式传入,例如(1,);

kwargs为dict类型的参数,也即位命名参数;

**实现自己的threading.Thread的子类,需要重载__init__()和run()。

2)threading.Thread对象的其他方法:

start(),用来启动线程;

join(), 等待直到线程结束;

setDeamon(), 设置线程为deamon线程,必须在start()调用前调用,默认为非demon。

注意: python的主线程在没有非deamon线程存在时就会退出。

3)threading的静态方法:

threading.current_thread() , 用来获得当前的线程;

threading.enumerate() , 用来多的当前存活的所有线程;

threading.Timer 定时器,其实是thread的一个字类型,使用如下:

def hello(): print("hello, world")

t = Timer(30.0, hello)

t.start()

4)logging是线程安全的

logging 模块是线程安全的,所以可以使用logging来帮助调试多线程程序。

import logging

logging.basicConfig(level=logging.DEBUG,

format="(%(threadName)-10s : %(message)s",

)

logging.debug("wait_for_event_timeout starting")

完!

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

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

相关文章

当.NET遇到机器学习

微软中国MSDN 点击上方蓝字关注我们ML.NET 是面向 .NET 开发人员的开源跨平台机器学习框架,你可以使用 C# 或 F# 创建自定义 ML 模型,而无需离开.NET 生态系统。ML.NET 使你能够在联机或脱机场景中将机器学习添加到 .NET 应用程序中。借助此功能&#x…

当你和你女朋友闹矛盾时......

1 听起来是这么个道理(素材来源网络,侵删)▼2 真的是非常专一了(via.皎皎月当楼)▼3 给朋友定做的蛋糕(素材来源网络,侵删)▼4 当你和女朋友闹矛盾时▼5 师范的男孩子有多害怕&a…

Android之基于xmpp openfire smack开发之Android客户端开发[3]

http://blog.csdn.net/shimiso/article/details/11225873 在上两篇文章中,我们依次介绍openfire部署以及smack常用API的使用,这一节中我们着力介绍如何基于asmack开发一个Android的客户端,本篇的重点在实践,讲解和原理环节&#…

PowerToys插件扩展(类似Alfred)

在mac系统除了自带的Spotlight还有一个很好用的工具叫Alfredimage在windows系统也有一个很好用的工具叫PowerToys,是微软的一个开源项目imagehttps://github.com/microsoft/PowerToys从上面的github地址可以下载安装包。image它有很多快捷功能,请大家自己…

Android之基于xmpp openfire smack开发之Android消息推送技术原理分析和实践[4]

http://blog.csdn.net/shimiso/article/details/8156439 前面几篇给大家系统讲解的有关xmpp openfire smack asmack相关的技术和使用,大家如果有所遗忘可以参考 顺便也一起回顾下xmpp的历程 xmpp协议起源于著名的Linux即时通讯服务服务器jabber,有时候我们会把xmp…

12年前的高考到底有多难,只在这一道题上就看出来了...

▲ 点击查看2008年高考江西数学考卷的最后一题,说是高考史上最恐怖的数学题,应该没有异议。这道题到底有多难呢?最后这道压轴题一共是14分。考试结果出来,所有考生的平均分是0.31分。曾有一位同学这样介绍:“在我们学校…

Cypher查询语言--Neo4j-WHERE(三)

目录 WhereBoolean 操作类型节点属性上的过滤正则表达式转义正则表达式不分大小些正则表达式关系类型上的过滤属性存在性如果缺失属性默认为true如果缺失属性默认为false空置null过滤关系过滤Where 如果需要从查找的数据的图中过滤,可以在查询语句中添加where子句。…

12篇学通C#网络编程——第一篇 基础之进程线程

在C#的网络编程中,进程和线程是必备的基础知识,同时也是一个重点,所以我们要好好的掌握一下。 一:概念 首先我们要知道什么是”进程”,什么是“线程”,好,查一下baike。 进程:是一个…

建立学生选课表 mysql 语句_MySQL常用SQL语句(Python实现学生、课程、选课表增删改查)...

以基本的学生选课为例,建立选课数据库,学生、班级、选课信息三张表,并分别对表进行插删改操作:import MySQLdbtry:conn MySQLdb.connect(host localhost, user root, passwd root, db xuanke, port 3306)cur conn.cursor()…

加快网站访问速度--jquery.js

jquery现在是越来越大,网络加载速度上我们应该做到能省就省,毫无疑问google的服务器和cdn以及访问速度是非常快的,而且google敞开怀抱,提供各种代码库给我们下载调用。jquery就是其中一个。 在jquery官网有从google 微软microsoft…

也谈程序员的35岁危机

前言本来这期要推一篇观察者模式和发布订阅模式的技术文给各位看官(在写了),但无奈最近爱奇艺裁员事件引起了轩然大波,互联网上和各种技术群又展开了轰轰烈烈的讨论,每位IT从业者都不能独善其身。那么今天这一期我们就聊聊程序员的35岁危机究…

豆瓣评分9.4!这部大片你不应该错过,每一秒都是不敢看的残忍!

全世界只有3.14 % 的人关注了爆炸吧知识人类占据了地球上绝大多数宜居的地方,我们面对着温柔的地球母亲,但对野生动物们来说,地球却是一个水深火热的星球。你觉得你已经一无所有了,你觉得生活的负荷已经让你难以前进了&#xff1b…

Unity3D4.* NGUI制作动态字库

新建一个工程,这个工程必须没有中文路径,否则会不识别字体!!! 首先导入NGUI插件,这里我用的是NGUI 3.0.2版本的。 在Assets 下创建一个文件夹,用来存放接下来的工作文件 。 这里随便选择一种字体…

java解析json_JAVA解析JSON数据

在使用第三方api的使用,有时候会从网络中获得json数据,所以说我们将如何解析json数据?下面小编将通过以下几点来进行json的讲解JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read…

Android之android studio如何解决‘:app:packageDebug‘.(Duplicate files copied in APK META-INF/DEPENDENCIES)

不废话,先爆照 今天在使用glide的时候,我在项目里面添加了httpcore-4.3.2.jar和4.3.5.jar包,但是当我运行的时候就出现了这个错误 然后在build.gradle里面配置下面的信息就好了, android { packagingOptions { exclude META-IN…

Asp.Net MVC4.0 官方教程 入门指南之一-- 入门介绍

本教程将为您讲解使用微软的Visual Studio 2012 来建立一个ASP.NET MVC4 Web应用程序所需要的基础知识。 本示例将构建什么样的应用程序? 您将实现一个简单的电影管理应用程序,此程序将从数据库中选取记录展示列表,支持查询和查看&#xff0…

关注!这所211高校通知不放寒假!校园将实行封闭管理!

全世界只有3.14 % 的人关注了爆炸吧知识本文转自:募格学术新年伊始,北京顺义,辽宁大连、沈阳,黑龙江黑河,河北石家庄、邢台等地相继报告新增本土病例,随着春节的临近,人员流动和聚集增加&#x…

MediatR 在.NET应用中的实践

MediatR 简介MediatR是.NET中的开源简单中介者模式实现.它通过一种进程内消息传递机制(无其他外部依赖),进行请求/响应、命令、查询、通知和事件的消息传递,并通过泛型来支持消息的智能调度。开源库地址是https://github.com/jbog…

java 录屏_java 录屏 小工具源码(idea)

【实例简介】录制的视频保存在 java.io.tmpdir 目录,windows通常为 C:\Users\Administrator\AppData\Local\Temp【实例截图】点击播放后,效果如下:【核心代码】import java.awt.AWTException;import java.awt.Color;import java.awt.Dimensio…

Java - 强引用、弱引用、软引用、虚引用

1、强引用(StrongReference) 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。如下: Object onew Object(); // 强引用 当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误&am…