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多线程学习资料
Dec 19 Python
python基于xml parse实现解析cdatasection数据
Sep 30 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
Jun 29 Python
Python 装饰器使用详解
Jul 29 Python
Python语言描述最大连续子序列和
Dec 05 Python
基于python 爬虫爬到含空格的url的处理方法
May 11 Python
python pandas生成时间列表
Jun 29 Python
Python代码太长换行的实现
Jul 05 Python
使用TensorFlow对图像进行随机旋转的实现示例
Jan 20 Python
Python基于Hypothesis测试库生成测试数据
Apr 29 Python
Python3读取和写入excel表格数据的示例代码
Jun 09 Python
python3爬虫中多线程进行解锁操作实例
Nov 25 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
海贼王:最美的悬赏令!
2020/03/02 日漫
PHP大转盘中奖概率算法实例
2014/10/21 PHP
PHP正则表达式过滤html标签属性(DEMO)
2016/05/04 PHP
JavaScript 创建对象和构造类实现代码
2009/07/30 Javascript
FusionCharts图表显示双Y轴双(多)曲线
2012/11/22 Javascript
javascript中的startWith和endWith的几种实现方法
2013/05/07 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
JavaScript常用数组算法小结
2016/02/13 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
easyUI实现(alert)提示框自动关闭的实例代码
2016/11/07 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
javascript 正则表达式分组、断言详解
2017/04/20 Javascript
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
2019/05/27 jQuery
详解基于Wepy开发小程序插件(推荐)
2019/08/01 Javascript
Node.js API详解之 os模块用法实例分析
2020/05/06 Javascript
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
python 编写简单网页服务器的实例
2018/06/01 Python
Python continue继续循环用法总结
2018/06/10 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
PyQt5 QListWidget选择多项并返回的实例
2019/06/17 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
通过python3实现投票功能代码实例
2019/09/26 Python
wxpython布局的实现方法
2019/11/01 Python
Python爬取爱奇艺电影信息代码实例
2019/11/26 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
2020/06/02 Python
PyInstaller运行原理及常用操作详解
2020/06/13 Python
常用的10个Python实用小技巧
2020/08/10 Python
python如何快速拼接字符串
2020/10/28 Python
时尚的CSS3进度条效果
2012/02/22 HTML / CSS
瑞典最好的运动鞋专卖店:Sneakersnstuff
2016/08/29 全球购物
伦敦奥运会的口号
2014/06/21 职场文书
新闻学专业职业生涯规划范文:我的人生我做主
2014/09/12 职场文书
2015年学生会纪检部工作总结
2015/03/31 职场文书
保姆聘用合同
2015/09/21 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers