• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python threading多线程编程实例

Python threading多线程编程实例

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了python threading,python threading模块,python3 threading,python中threading,threading等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Python 的多线程有两种实现方法:

函数,线程类

1.函数

调用 thread 模块中的 start_new_thread() 函数来创建线程,以线程函数的形式告诉线程该做什么

# -*- coding: utf-8 -*-
import thread
def f(name):
  #定义线程函数
  print "this is " + name
 
if __name__ == '__main__':
  thread.start_new_thread(f, ("thread1",))
  #用start_new_thread()调用线程函数和其他参数
  while 1:
    pass
</div>

不过这种方法暂时没能找到其他辅助方法,连主线程等待都要用 while 1 这种方法解决。

2.线程类

调用 threading 模块,创建 threading.Thread 的子类来得到自定义线程类。
# -*- coding: utf-8 -*-
import threading
class Th(threading.Thread):
  def __init__(self, name):
    threading.Thread.__init__(self)
    self.t_name = name
    #调用父类构造函数
 
  def run(self):
    #重写run()函数,线程默认从此函数开始执行
    print "This is " + self.t_name
 
if __name__ == '__main__':
  thread1 = Th("Thread_1")
  thread1.start()
  #start()函数启动线程,自动执行run()函数
</div>

threading.Thread 类的可继承函数:
getName() 获得线程对象名称
setName() 设置线程对象名称
join() 等待调用的线程结束后再运行之后的命令
setDaemon(bool) 阻塞模式, True: 父线程不等待子线程结束, False 等待,默认为 False
isDaemon() 判断子线程是否和父线程一起结束,即 setDaemon() 设置的值
isAlive() 判断线程是否在运行

实例

import threading
import time
class Th(threading.Thread):
  def __init__(self, thread_name):
    threading.Thread.__init__(self)
    self.setName(thread_name)
 
  def run(self):
    print "This is thread " + self.getName()
    for i in range(5):
      time.sleep(1)
      print str(i)
    print self.getName() + "is over"
</div>

join() 阻塞等待

if __name__ == '__main__':
    thread1 = Th("T1 ")
    thread1.start()
    #thread1.join()
    print "main thread is over"
</div>

不带 thread1.join() ,得到如下结果:
This is thread T1
main thread is over
0
1
2
T1 is over
</div>
不等待 thread1 完成,执行之后语句。
加了 thread1.join() ,得到如下结果:
This is thread T1
0
1
2
T1 is over
main thread is over
</div>
阻塞等待 thread1 结束,才执行下面语句

主线程等待

if __name__ == '__main__':
  thread1 = Th("T1 ")
  thread1.setDaemon(True)
  #要在线程执行之前就设置这个量
  thread1.start()
  print "main thread is over"
</div>

报错: Exception in thread T1 (most likely raised during interpreter shutdown):
也就是主线程不等待子线程就结束了。

多个子线程
if __name__ == '__main__':
    for i in range(3):
        t = Th(str(i))
        t.start()
    print "main thread is over"
</div>

这里的 t 可同时处理多个线程,即 t 为线程句柄,重新赋值不影响线程。

这里奇怪的是,运行 t.run() 时,不会再执行其他线程。虽不明,还是用 start() 吧。暂且理解为 start() 是非阻塞并行的,而 run 是阻塞的。

线程锁

threading 提供线程锁,可以实现线程同步。
import threading
import time
class Th(threading.Thread):
  def __init__(self, thread_name):
    threading.Thread.__init__(self)
    self.setName(thread_name)
 
  def run(self):
    threadLock.acquire()
    #获得锁之后再运行
    print "This is thread " + self.getName()
    for i in range(3):
      time.sleep(1)
      print str(i)
    print self.getName() + " is over"
    threadLock.release()
    #释放锁
if __name__ == '__main__':
  threadLock = threading.Lock()
  #设置全局锁
  thread1 = Th('Thread_1')
  thread2 = Th('Thread_2')
  thread1.start()
  thread2.start()
</div>

得到结果:
This is thread Thread_1
0
1
2
Thread_1 is over
This is thread Thread_2
0
1
2
Thread_2 is over
</div>

</div>

您可能想查找下面的文章:

  • 在Python中通过threading模块定义和调用线程的方法
  • Python中线程编程之threading模块的使用详解
  • 举例详解Python中threading模块的几个常用方法
  • Python中threading模块join函数用法实例分析
  • python中threading超线程用法实例分析
  • python threading模块操作多线程介绍
  • python threading模块操作多线程介绍
  • Python多线程编程(三):threading.Thread类的重要函数和方法
  • Python多线程编程(一):threading模块综述
  • Python THREADING模块中的JOIN()方法深入理解

相关文章

  • Python可变参数函数用法实例
  • Python编程之event对象的用法实例分析
  • Python中的闭包总结
  • python从入门到精通(DAY 3)
  • python处理大数字的方法
  • 基于python的汉字转GBK码实现代码
  • 浅谈Python的Django框架中的缓存控制
  • 使用Python读写文本文件及编写简单的文本编辑器
  • Python远程桌面协议RDPY安装使用介绍
  • 使用Node.js和Socket.IO扩展Django的实时处理功能

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • python中PIL安装简单教程
    • 解决Python传递中文参数的问题
    • python使用正则表达式提取网页URL的方法
    • Python的条件语句与运算符优先级详解
    • Python实现设置windows桌面壁纸代码分享
    • python为tornado添加recaptcha验证码功能
    • Python利用带权重随机数解决抽奖和游戏爆装备问题
    • Python编程实现生成特定范围内不重复多个随机数的2种方法
    • 深入讲解Python编程中的字符串
    • 在Django中限制已登录用户的访问的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有