当前位置: 首页 > news >正文

Python的threading模块

 

为引入多线程的概念,下面是一个例子:

import time, datetimestartTime = datetime.datetime(2024, 1, 1, 0, 0, 0)
while datetime.datetime.now() < startTime:time.sleep(1)print('Program now starting on NewYear2024')

在等待time.sleep()的循环调用完成时,程序不能做任何事情,它只是在那里做着,直到2029年万圣节。 这是因为Python程序在默认情况下,只有一个执行线程。

执行线程

在下载文件时,在设置了一次只能下载一个文件的程序中,同一时间段的下载任务中只能执行下载一个文件,这就是单线程。示例图如下:

 在设置同时可下载2个及以上文件的程序中,同一时间段的下载任务可以同时执行下载多个文件,这就是多线程。示例图如下:

 threading模块

在上面的代码中,为了不必等待直到time.sleep()函数完成,在Python中可以使用threading模块,在单独的线程中执行延迟或安排的代码。程序可以在原来的线程中同时做其他工作。
以下是一个简单的示例代码:

import threading, timeprint('Starting of program.')def takeANap():time.sleep(10)print('Wake up!')threadObj = threading.Thread(target=takeANap)
threadObj.start()print('End of program.')

代码运行结果是:

 过了10秒,运行结果是:

因为 def takeANap() 定义一个希望用于新线程中的函数,此时代码中有两个线程,第一个是print('Starting of program.'),这个线程中还有print('End of program.'),先执行并结束。

而 takeANap()函数的所在的线程是在threadObj.start()调用时才创建,始于takeANap()函数的开始处,在takeANap()返回后才结束。

在程序的所有线程结束之前,Python程序不会终止。第二个线程在第一个线程结束后仍然执行time.sleep(10)调用。

向线程的目标函数传递参数

如果想在新线程中运行的目标函数有参数,可以将目标函数的参数传入threading.Thread()。例如,假设在一个线程中运行以下print()调用:

print('Cats', 'Dogs', 'Frogs', sep=' & ')

 该print()调用有3个常规参数:‘Cats'、'Dogs'和'Frogs',以及一个关键字参数sep=' & '。

常规参数可作为一个列表传递给threading.Thread()中的args关键字参数。关键字参数可以作为一个字典,传递给threading.Thread()中的kwargs关键字参数,代码如下:

import threading
threadObj = threading.Thread(target=print, args=['Cats', 'Dogs', 'Frogs'], 
kwargs={'sep': ' & '})
threadObj.start()

 注意:调用threading.Thread()时,关键字参数是target=print,而不是target=print(),是调用print函数本身,而不是调用print(),并传入它的返回值,否则print()的返回将是无。


 

http://www.lryc.cn/news/100029.html

相关文章:

  • HTML5 的离线储存怎么使用,工作原理
  • FTP文件传输协议与DHCP
  • 【UE5 多人联机教程】06-显示玩家名称
  • Rust vs Go:常用语法对比(五)
  • Flutter 扩展函数项目实用之封装SizedBox
  • EMC学习笔记(二十)EMC常用元件简单介绍(二)
  • 基本排序算法
  • python调用百度ai将图片/pdf识别为表格excel
  • Ansible最佳实践之Playbook管理滚动更新
  • 基于Citespace、vosviewer、R语言的文献计量学可视化分析及SCI论文高效写作方法教程
  • 【MATLAB】GM(1,1) 灰色预测模型及算法
  • Go重写Redis中间件 - Go实现Redis协议解析器
  • 海外抖音Tiktok强势来袭,有些人半年赚别人十倍工资
  • devDept Eyeshot 2024 预告-Update-Crack
  • 教雅川学缠论05-线段
  • SpringBoot 配置⽂件
  • 基于Python的电影票房爬取与可视化系统的设计与实现
  • Packet Tracer – 配置系统日志和 NTP
  • TypeScript 联合类型,类型推断,类型断言
  • 到底叫 集合还是数组还是list还是列表?
  • LBERT论文详解
  • C++终止cin输入while循环时多读取^Z或^D的问题
  • c#[WebMethod]方法接收前端传入的JsonArray的方法
  • WebService 报错 集锦
  • C++--菱形继承
  • Vue 3:玩一下web前端技术(二)
  • 自然语言处理14-基于文本向量和欧氏距离相似度的文本匹配,用于找到与查询语句最相似的文本
  • iOS开发-聊天emoji表情与自定义动图表情左右滑动控件
  • Mybatis plus 存储 List、Map
  • Electron 系统通知 Notification 实践指南