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