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类的继承实例详解
Mar 30 Python
Python实现单词翻译功能
Jun 06 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
Jun 30 Python
python with提前退出遇到的坑与解决方案
Jan 05 Python
详解Python如何生成词云的方法
Jun 01 Python
Python实现图片拼接的代码
Jul 02 Python
用Python逐行分析文件方法
Jan 28 Python
django富文本编辑器的实现示例
Apr 10 Python
Django框架自定义session处理操作示例
May 27 Python
PyCharm下载和安装详细步骤
Dec 17 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
Apr 28 Python
基于Python 函数和方法的区别说明
Mar 24 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+DBM的同学录程序(4)
2006/10/09 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
2020/04/06 PHP
PHP array_reverse() 函数原理及实例解析
2020/07/14 PHP
JavaScript 应用类库代码
2008/06/02 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
Javascript中的getUTCHours()方法使用详解
2015/06/10 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
2015/08/05 Javascript
浅析BootStrap栅格系统
2016/06/07 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
ES6中的Promise代码详解
2017/10/09 Javascript
jQuery 防止相同的事件快速重复触发方法
2018/02/08 jQuery
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
2018/08/24 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
2018/12/12 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
对numpy中array和asarray的区别详解
2018/04/17 Python
python去重,一个由dict组成的list的去重示例
2019/01/21 Python
Python3中exp()函数用法分析
2019/02/19 Python
使用Python实现分别输出每个数组
2019/12/06 Python
Django 允许局域网中的机器访问你的主机操作
2020/05/13 Python
Appium+Python实现简单的自动化登录测试的实现
2021/01/26 Python
Java面试笔试题大全
2016/11/23 面试题
Ruby如何定义一个类
2012/10/08 面试题
音乐教育感言
2014/03/05 职场文书
小学评语大全
2014/04/22 职场文书
全陪导游词
2015/02/04 职场文书
百万英镑观后感
2015/06/09 职场文书
政审证明材料
2015/06/19 职场文书
2015年教务处干事工作总结
2015/07/22 职场文书
2016廉政教育学习心得体会
2016/01/25 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
MySQL大小写敏感的注意事项
2021/05/24 MySQL
Linux磁盘管理方法介绍
2022/06/01 Servers