Python3 线程中常用的两个模块为:

  • _thread
  • threading(推荐使用)

使用Thread类创建

import threading
from time import sleep,ctime def sing():
for i in range(3):
print("正在唱歌...%d"%i)
sleep(1) def dance():
for i in range(3):
print("正在跳舞...%d"%i)
sleep(1) if __name__ == '__main__':
print('---开始---:%s'%ctime()) t1 = threading.Thread(target=sing)
t2 = threading.Thread(target=dance) t1.start()
t2.start() #sleep(5) # 屏蔽此行代码,试试看,程序是否会立马结束?
print('---结束---:%s'%ctime())
"""
输出结果:
---开始---:Sat Aug 24 08:44:21 2019
正在唱歌...0
正在跳舞...0---结束---:Sat Aug 24 08:44:21 2019
正在唱歌...1
正在跳舞...1
正在唱歌...2
正在跳舞...2
"""

说明:主线程会等待所有的子线程结束后才结束

使用Thread子类创建

为了让每个线程的封装性更完美,所以使用threading模块时,往往会定义一个新的子类class,只要继承threading.Thread就可以了,然后重写run方法。

import threading
import time class MyThread(threading.Thread):
def run(self):
for i in range(3):
time.sleep(1)
msg = "I'm "+self.name+' @ '+str(i) #name属性中保存的是当前线程的名字
print(msg) if __name__ == '__main__':
t = MyThread()
t.start()
"""
输出结果:
I'm Thread-5 @ 0
I'm Thread-5 @ 1
I'm Thread-5 @ 2
"""

使用线程池ThreadPoolExecutor创建

from concurrent.futures import ThreadPoolExecutor
import time
import os def sayhello(a):
for i in range(10):
time.sleep(1)
print("hello: " + a) def main():
seed = ["a", "b", "c"]
# 最大线程数为3,使用with可以自动关闭线程池,简化操作
with ThreadPoolExecutor(3) as executor:
for each in seed:
# map可以保证输出的顺序, submit输出的顺序是乱的
executor.submit(sayhello, each) print("主线程结束") if __name__ == '__main__':
main()

最新文章

  1. Elasticsearch之client源码简要分析
  2. Openwrt dnsmasq 设置要点
  3. mac下使用glew库,方法
  4. 5.5 Selenium2中的元素定位
  5. MySQL —— 程序连接时的驱动名称和URL
  6. R programming, In ks.test(x, y) : p-value will be approximate in the presence of ties
  7. Android开发之XML的创建和解析
  8. 百度地图SDK下载以及创建应用(申请Key)和本地导入Demo
  9. windows form (窗体) 之间传值小结
  10. bitmap index
  11. Excel 国家甘特图(多图)
  12. ubuntu12.04 安装和配置jdk1.7
  13. jmeter将参数值写入到指定文件
  14. 通过s3cmd上传css文件到s3导致样式加载失败
  15. (BUG记录)记一次与其他系统交互协作时造成的锁表问题
  16. sql server 临时表(上) Tempdb概述
  17. 继承 in her it
  18. 2018-2019-2 20175234 实验一 Java开发环境的熟悉(Linux + IDEA)
  19. mysql常用增删改查命令(纯纪录.orm用得基本功都没了。)
  20. iOS系统及客户端软件测试的基础介绍

热门文章

  1. linux 查看内网IP和外网IP
  2. 一步一步实现一个Promise A+规范的 Promise
  3. python3笔记二十:时间操作time
  4. vue中如何刷新页面
  5. android data binding jetpack IV 绑定一个方法另一种写法和参数传递
  6. Linux 安全工具之extundelete误删除恢复
  7. [git]查看一个git项目的仓库位置
  8. Xman冬令营writeup
  9. SQLSERVER大批量数据快速导入Redis
  10. openstack共享组件--memcache缓存(2)