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 threading模块操作多线程介绍
Apr 08 Python
通过Python来使用七牛云存储的方法详解
Aug 07 Python
Django自定义认证方式用法示例
Jun 23 Python
使用python爬取抖音视频列表信息
Jul 15 Python
Django自带日志 settings.py文件配置方法
Aug 30 Python
wxpython布局的实现方法
Nov 01 Python
Python插入Elasticsearch操作方法解析
Jan 19 Python
Python restful框架接口开发实现
Apr 13 Python
django 装饰器 检测登录状态操作
Jul 02 Python
Python如何进行时间处理
Aug 06 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
Oct 30 Python
PyTorch dropout设置训练和测试模式的实现
May 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
PHP循环语句笔记(foreach,list)
2011/11/29 PHP
解析dedeCMS验证码的实现代码
2013/06/07 PHP
纯php生成随机密码
2015/10/30 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
jquery 输入框数字限制插件
2009/11/10 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
JavaScript操作Cookie方法实例分析
2015/05/27 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
jQuery常见面试题之DOM操作详析
2017/07/05 jQuery
浅析为什么a="abc" 不等于 a=new String("abc")
2017/10/25 Javascript
JavaScript模块详解
2017/12/18 Javascript
浅谈React深度编程之受控组件与非受控组件
2017/12/26 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
2020/04/03 Javascript
[00:32]2018DOTA2亚洲邀请赛Mineski出场
2018/04/04 DOTA
Python实现的简单hangman游戏实例
2015/06/28 Python
python 读写txt文件 json文件的实现方法
2016/10/22 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
2018/02/24 Python
Django contenttypes 框架详解(小结)
2018/08/13 Python
Python Numpy:找到list中的np.nan值方法
2018/10/30 Python
python的依赖管理的实现
2019/05/14 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
python将字符串转变成dict格式的实现
2019/11/18 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
解决python 找不到module的问题
2020/02/12 Python
一款利用纯css3实现的360度翻转按钮的实例教程
2014/11/05 HTML / CSS
Lacoste美国官网:经典POLO衫品牌
2016/10/12 全球购物
全球烹饪课程的领先预订平台:Cookly
2020/01/28 全球购物
公司向个人借款协议书范本
2014/10/09 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
团结友爱主题班会
2015/08/13 职场文书
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
2021/04/01 PHP
linux下导入、导出mysql数据库命令的实现方法
2021/05/26 MySQL
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL