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调用shell的方法
Nov 20 Python
你应该知道的python列表去重方法
Jan 17 Python
Python实现字符串格式化的方法小结
Feb 20 Python
Python OpenCV处理图像之滤镜和图像运算
Jul 10 Python
PyQt5 QListWidget选择多项并返回的实例
Jun 17 Python
python中PS 图像调整算法原理之亮度调整
Jun 28 Python
Django框架之登录后自定义跳转页面的实现方法
Jul 18 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
Aug 08 Python
python matplotlib库绘制条形图练习题
Aug 10 Python
Django 拆分model和view的实现方法
Aug 16 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
python palywright库基本使用
Jan 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
Windows2003 下 MySQL 数据库每天自动备份
2006/12/21 PHP
php对gzip文件或者字符串解压实例参考
2008/07/25 PHP
php长字符串定义方法
2012/07/12 PHP
php使用Cookie实现和用户会话的方法
2015/01/21 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
编写自己的jQuery插件简单实现代码
2011/04/19 Javascript
jQuery数组处理方法汇总
2011/06/20 Javascript
jQuery javaScript捕获回车事件(示例代码)
2013/11/07 Javascript
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
iPhone手机上搭建nodejs服务器步骤方法
2015/07/06 NodeJs
jquery实现加载进度条提示效果
2015/11/23 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
Vue2单一事件管理组件通信
2017/05/09 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
教你如何用Node实现API的转发(某音乐)
2019/09/20 Javascript
vue组件中节流函数的失效的原因和解决方法
2020/12/02 Vue.js
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
python pdb调试方法分享
2014/01/21 Python
Python通过select实现异步IO的方法
2015/06/04 Python
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
Python模块搜索路径代码详解
2018/01/29 Python
matplotlib subplots 调整子图间矩的实例
2018/05/25 Python
在Python中实现替换字符串中的子串的示例
2018/10/31 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
python读取文件名并改名字的实例
2019/01/07 Python
Django中自定义admin Xadmin的实现代码
2019/08/09 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
django rest framework使用django-filter用法
2020/07/15 Python
python源文件的字符编码知识点详解
2021/03/04 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
中国文明网签名寄语
2014/01/18 职场文书
集中采购方案
2014/06/10 职场文书
党员转正意见怎么写
2015/06/03 职场文书
后天观后感
2015/06/08 职场文书
使用Python开发冰球小游戏
2022/04/30 Python