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函数中定义参数的四种方式
Nov 30 Python
python简单实现基于SSL的IRC bot实例
Jun 15 Python
python导入时小括号大作用
Jan 10 Python
Python实现正整数分解质因数操作示例
Aug 01 Python
python 多个参数不为空校验方法
Feb 14 Python
Django使用AJAX调用自己写的API接口的方法
Mar 06 Python
Python SMTP配置参数并发送邮件
Jun 16 Python
Keras实现DenseNet结构操作
Jul 06 Python
Python利用pip安装tar.gz格式的离线资源包
Sep 14 Python
python从Oracle读取数据生成图表
Oct 14 Python
python中用ggplot绘制画图实例讲解
Jan 26 Python
一文读懂python Scrapy爬虫框架
Feb 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数组函数序列之array_values() 获取数组元素值的函数与方法
2011/10/30 PHP
php计算当前程序执行时间示例
2014/04/24 PHP
CodeIgniter安全相关设置汇总
2014/07/03 PHP
php控制文件下载速度的方法
2015/03/24 PHP
php操作MongoDB类实例
2015/06/17 PHP
jQuery ul标签下拉菜单演示代码
2010/12/11 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
2014/06/05 Javascript
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法
2015/11/27 Javascript
用JS生成UUID的方法实例
2016/03/30 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
JS定义类的六种方式详解
2016/05/12 Javascript
基于zepto.js简单实现上传图片
2016/06/21 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
JS+HTML5 canvas绘制验证码示例
2018/12/05 Javascript
详解JavaScript中的坐标和距离
2019/05/27 Javascript
js Array.slice的8种不同用法示例
2019/07/10 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
JavaScript数组排序功能简单实现
2020/05/14 Javascript
[01:15:18]2014 DOTA2国际邀请赛中国区预选赛 LGD VS Speed Gaming.cn
2014/05/22 DOTA
[22:07]DOTA2-DPC中国联赛 正赛 iG vs Magma 选手采访
2021/03/11 DOTA
python&MongoDB爬取图书馆借阅记录
2016/02/05 Python
python 网络编程常用代码段
2016/08/28 Python
python框架中flask知识点总结
2018/08/17 Python
Python 线程池用法简单示例
2019/10/02 Python
tensorflow 限制显存大小的实现
2020/02/03 Python
更新升级python和pip版本后不生效的问题解决
2020/04/17 Python
Python Selenium操作Cookie的实例方法
2021/02/28 Python
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
十佳家长事迹材料
2014/08/26 职场文书
2014政府领导班子对照检查材料思想汇报(3篇)
2014/09/26 职场文书
网球场地租赁协议范本
2014/10/07 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书
介绍信格式
2015/01/30 职场文书
公务员个人年终总结
2015/02/12 职场文书