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中利用生成器实现的并发编程
May 04 Python
Python按行读取文件的实现方法【小文件和大文件读取】
Sep 19 Python
python中异常报错处理方法汇总
Nov 20 Python
Python命令启动Web服务器实例详解
Feb 23 Python
Numpy之文件存取的示例代码
Aug 03 Python
Python读取mat文件,并保存为pickle格式的方法
Oct 23 Python
对Python函数设计规范详解
Jul 19 Python
python实现的读取网页并分词功能示例
Oct 29 Python
Python实现序列化及csv文件读取
Jan 19 Python
windows上彻底删除jupyter notebook的实现
Apr 13 Python
Django 解决阿里云部署同步数据库报错的问题
May 14 Python
opencv深入浅出了解机器学习和深度学习
Mar 17 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
文章推荐系统(三)
2006/10/09 PHP
php array_filter除去数组中的空字符元素
2020/06/21 PHP
Symfony2 session用法实例分析
2016/02/04 PHP
php版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
2016/10/17 PHP
如何打开php的gd2库
2017/02/09 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
根据地区不同显示时间的javascript代码
2007/08/13 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
jQuery实现获取table表格第一列值的方法
2016/03/01 Javascript
jQuery 操作input中radio的技巧
2016/07/18 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
2017/05/01 jQuery
详解react使用react-bootstrap当轮子造车
2017/08/15 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
vue+moment实现倒计时效果
2019/08/26 Javascript
python中sets模块的用法实例
2014/09/30 Python
使用Python3中的gettext模块翻译Python源码以支持多语言
2015/03/31 Python
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
python实现周期方波信号频谱图
2018/07/21 Python
Python延时操作实现方法示例
2018/08/14 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
2019/08/31 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
2020/01/20 Python
在keras下实现多个模型的融合方式
2020/05/23 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
利用Storage Event实现页面间通信的示例代码
2018/07/26 HTML / CSS
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
医院2014国庆节活动策划方案
2014/09/21 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
2014年客户经理工作总结
2014/11/20 职场文书
化验室安全管理制度
2015/08/06 职场文书
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python