python多线程操作实例


Posted in Python onNovember 21, 2014

一、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())

运行结果如下:

python多线程操作实例

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")
Python 相关文章推荐
python文件读写并使用mysql批量插入示例分享(python操作mysql)
Feb 17 Python
Python随机生成一个6位的验证码代码分享
Mar 24 Python
在SAE上部署Python的Django框架的一些问题汇总
May 30 Python
http请求 request失败自动重新尝试代码示例
Jan 25 Python
Python3使用正则表达式爬取内涵段子示例
Apr 22 Python
Python for i in range ()用法详解
Sep 18 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
Jan 20 Python
python解释器pycharm安装及环境变量配置教程图文详解
Feb 26 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
Apr 16 Python
python工具快速为音视频自动生成字幕(使用说明)
Jan 27 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
Jan 27 Python
python可视化分析绘制带趋势线的散点图和边缘直方图
Jun 25 Python
Python中的闭包详细介绍和实例
Nov 21 #Python
Python多线程同步Lock、RLock、Semaphore、Event实例
Nov 21 #Python
python多进程操作实例
Nov 21 #Python
Python多进程通信Queue、Pipe、Value、Array实例
Nov 21 #Python
Python多进程同步Lock、Semaphore、Event实例
Nov 21 #Python
Python multiprocessing.Manager介绍和实例(进程间共享数据)
Nov 21 #Python
Python pickle类库介绍(对象序列化和反序列化)
Nov 21 #Python
You might like
php中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
php牛逼的面试题分享
2013/01/18 PHP
php 使用GD库为页面增加水印示例代码
2014/03/24 PHP
php实现在服务器上创建目录的方法
2015/03/16 PHP
利用PHP获取汉字首字母并且分组排序详解
2017/10/22 PHP
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
jQuery时间轴插件使用详解
2015/07/16 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
jQuery实现点击查看大图并以弹框的形式居中
2016/08/08 Javascript
JavaScript动态数量的文件上传控件
2016/11/18 Javascript
原生JS实现《别踩白块》游戏(兼容IE)
2017/02/20 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
angular8和ngrx8结合使用的步骤介绍
2019/12/01 Javascript
[45:50]完美世界DOTA2联赛PWL S3 CPG vs Forest 第二场 12.16
2020/12/17 DOTA
Python中的__SLOTS__属性使用示例
2015/02/18 Python
使用py2exe在Windows下将Python程序转为exe文件
2016/03/04 Python
TensorFlow实现AutoEncoder自编码器
2018/03/09 Python
Python中存取文件的4种不同操作
2018/07/02 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
pandas.dataframe按行索引表达式选取方法
2018/10/30 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
python内置模块collections知识点总结
2019/12/19 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
Python单元测试及unittest框架用法实例解析
2020/07/09 Python
bonprix荷兰网上商店:便宜的服装、鞋子和家居用品
2020/07/04 全球购物
商铺消防安全责任书
2014/07/29 职场文书
银行反洗钱宣传活动总结
2015/05/08 职场文书
2015年工会工作总结范文
2015/07/23 职场文书
消防安全主题班会
2015/08/12 职场文书
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js