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时间获取及转换知识汇总
Jan 11 Python
详解K-means算法在Python中的实现
Dec 05 Python
python实现猜数字小游戏
Mar 24 Python
对Tensorflow中的矩阵运算函数详解
Jul 27 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
Mar 27 Python
python实现对象列表根据某个属性排序的方法详解
Jun 11 Python
Python实现基于SVM的分类器的方法
Jul 19 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
Dec 10 Python
使用遗传算法求二元函数的最小值
Feb 11 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
Feb 26 Python
PyCharm永久激活方式(推荐)
Sep 22 Python
Python源码解析之List
May 21 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 无限分类的树类代码
2009/12/03 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
2015/10/21 PHP
PHP数组函数知识汇总
2016/05/12 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
你必须知道的Javascript知识点之"字面量和对应类型"说明介绍
2013/04/23 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
jquery用offset()方法获得元素的xy坐标
2014/09/06 Javascript
jQuery.holdReady()方法用法实例
2014/12/27 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
CSS或者JS实现鼠标悬停显示另一元素
2016/01/22 Javascript
BootStrap Typeahead自动补全插件实例代码
2016/08/10 Javascript
AngularJS表单验证中级篇(3)
2016/09/28 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
微信小程序实现弹框效果
2020/05/26 Javascript
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
python实现简单购物商城
2016/05/21 Python
python用装饰器自动注册Tornado路由详解
2017/02/14 Python
Python中标准模块importlib详解
2017/04/16 Python
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
pytorch masked_fill报错的解决
2020/02/18 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
2020/11/13 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
css3过渡_动力节点Java学院整理
2017/07/11 HTML / CSS
利用CSS3的transform做的动态时钟效果
2011/09/21 HTML / CSS
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
Html5 web本地存储实例详解
2016/07/28 HTML / CSS
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
员工自我鉴定范文
2013/10/06 职场文书
大学生就业自我推荐信
2014/05/10 职场文书
公司口号大全
2014/06/11 职场文书
党员学习党的群众路线思想汇报(5篇)
2014/09/10 职场文书
保留意见审计报告
2015/06/05 职场文书