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 logging模块学习笔记
May 24 Python
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
Apr 08 Python
基于Python实现对PDF文件的OCR识别
Aug 05 Python
django站点管理详解
Dec 12 Python
详解Python nose单元测试框架的安装与使用
Dec 20 Python
python画折线图的程序
Jul 26 Python
python游戏地图最短路径求解
Jan 16 Python
Python实现计算长方形面积(带参数函数demo)
Jan 18 Python
Python 改变数组类型为uint8的实现
Apr 09 Python
Django中FilePathField字段的用法
May 21 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
Jun 12 Python
Python爬取豆瓣数据实现过程解析
Oct 27 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
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
2010/10/15 Javascript
网易JS面试题与Javascript词法作用域说明
2010/11/09 Javascript
js 浏览器事件介绍
2012/03/30 Javascript
关于js中alert弹出窗口文本换行问题简单详细说明
2012/12/11 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
jquery模拟进度条实现方法
2015/08/03 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
微信小程序开发教程之增加mixin扩展
2017/08/09 Javascript
微信小程序自定义导航栏
2018/12/31 Javascript
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
如何解决vue在ios微信"复制链接"功能问题
2020/03/26 Javascript
Python生成pdf文件的方法
2014/08/04 Python
Python编程中的文件读写及相关的文件对象方法讲解
2016/01/19 Python
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
python中正则表达式的使用方法
2018/02/25 Python
python矩阵的转置和逆转实例
2018/12/12 Python
python去重,一个由dict组成的list的去重示例
2019/01/21 Python
python实现批量注册网站用户的示例
2019/02/22 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
用python写测试数据文件过程解析
2019/09/25 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
python如何控制进程或者线程的个数
2020/10/16 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
方正Java笔试题
2014/07/03 面试题
大学生职业生涯设计书
2014/01/02 职场文书
读书活动实施方案
2014/03/10 职场文书
搞笑创意广告语
2014/03/17 职场文书
四风批评与自我批评发言稿
2014/10/14 职场文书
介绍信格式
2015/01/30 职场文书
小学六年级班主任工作经验交流材料
2015/11/02 职场文书
靠谱准确的求职信
2019/04/02 职场文书
微软Win11 全新照片应用面向 Dev预览版推出 新版本上手体验图集
2022/09/23 数码科技