文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python3 多线程讲解

2023-01-31 08:16

关注

前言

Python3 线程中常用的两个模块为
•_thread
•threading(推荐使用)

thread 模块已被废弃。用户可以使用 threading 模块代替。所以,在 Python3 中不能再使用”thread” 模块。为了兼容性,Python3 将 thread 重命名为 “_thread”。

_thread

Python中使用线程有两种方式:函数或者用类来包装线程对象。
函数式:调用 _thread 模块中的start_new_thread()函数来产生新线程。语法如下:
_thread.start_new_thread ( function, args[, kwargs] )1

参数说明:
•function - 线程函数。
•args - 传递给线程函数的参数,他必须是个tuple类型。
•kwargs - 可选参数。
1 #!/usr/bin/python3
2 # -- coding: UTF-8 --
3
4 # Python3 多线程
5
6 import _thread
7 import time
8 import sys
9
10 # 为线程定义一个函数
11
12 def print_time(threadName,delay):
13 count=0
14 while count<5:
15 time.sleep(delay)
16 count+=1
17 print("%s:%s"%(threadName,time.ctime(time.time())))
18
19 # 创建两个线程
20 try:
21 _thread.start_new_thread(print_time,("Thread-1",2,))
22 _thread.start_new_thread(print_time,("Thread-2",4,))
23 except:
24 print("Error:无法启动线程",sys.exc_info())
25
26 while 1:
27 pass

threading
1 #!/usr/bin/python3
2 # -- coding: UTF-8 --
3
4 # python3 多线程
5
6 import threading
7 import time
8
9 exitFlag=0
10
11 def print_time(threadName,delay,counter):
12 while counter:
13 if exitFlag:
14 threadName.exit()
15 time.sleep(delay)
16 print("%s:%s"%(threadName,time.ctime(time.time())))
17 counter-=1
18
19 class myThread(threading.Thread):
20 def init(self,threadID,name,counter):
21 threading.Thread.init(self)
22 self.threadID=threadID
23 self.name=name
24 self.counter=counter
25 def run(self):
26 print("线程开始:"+self.name)
27 print_time(self.name,self.counter,5)
28 print("线程退出:"+self.name)
29
30 # 创建线程
31 thread1=myThread(1,"Thread-1",1)
32 thread2=myThread(2,"Thread-2",2)
33
34 # 开始新线程
35 thread1.start()
36 thread2.start()
37 thread1.join()
38 thread2.join()
39

线程模块

Python3 通过两个标准库 _thread 和 threading 提供对线程的支持。
_thread 提供了低级别的、原始的线程以及一个简单的锁,它相比于 threading 模块的功能还是比较有限的。

threading 模块除了包含 _thread 模块中的所有方法外,还提供的其他方法:

•threading.currentThread(): 返回当前的线程变量。

•threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。

•threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。

除了使用方法外,线程模块同样提供了Thread类来处理线程,Thread类提供了以下方法:
•run(): 用以表示线程活动的方法。
•start():启动线程活动。
•join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
•isAlive(): 返回线程是否活动的。
•getName(): 返回线程名。
•setName(): 设置线程名。

原文:http://www.runoob.com/python3/python3-multithreading.html

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯