run() 方法并不启动一个新线程,就是在主线程中调用了一个普通函数而已。
start() 方法是启动一个子线程,线程名就是自己定义的name。
因此,如果你想启动多线程,就必须使用start()方法。
请看实例:(源代码)
1 使用run()方法启动线程,它打印的线程名是MainThread,也就是主线程。
import threading,time def worker(): count = 1 while True: if count >= 4: break time.sleep(1) count += 1 print(“thread name = {}”.format(threading.current_thread().name)) print(“Start Test run()”) t1 = threading.Thread(target=worker, name=“MyTryThread”) t1.run() print(“run() test end”)
运行结果:
Start Test run() thread name = MainThread thread name = MainThread thread name = MainThread run() test end
2 使用start()方法启动的线程名是我们定义线程对象时设置的name="MyThread"的值,如果没有设置name参数值,则会打印系统分配的Thread-1,Thread-2…这样的名称。
import threading,time def worker(): count = 1 while True: if count >= 4: break time.sleep(2) count += 1 print(“thread name = {}”.format(threading.current_thread().name)) # 当前线程名 print(“Start Test start()”) t = threading.Thread(target=worker, name=“MyTryThread”) t.start() t.join() print(“start() test end”)
运行结果:
Start Test start() thread name = MyTryThread thread name = MyTryThread thread name = MyTryThread start() test end
3 两个子线程都用run()方法启动,但却是先运行t1.run(),运行完之后才按顺序运行t2.run(),两个线程都工作在主线程,没有启动新线程,thread ID都是一样的,因此,run()方法仅仅是普通函数调用。
import threading,time def worker(): count = 1 while True: if count >= 4: break time.sleep(2) count += 1 print(“thread name = {}, thread id = {}”.format(threading.current_thread().name, threading.current_thread().ident)) print(“Start Test run()”) t1 = threading.Thread(target=worker, name=“t1”) t2 = threading.Thread(target=worker, name=‘t2') t1.run() t2.run() print(“run() test end”)
运行结果:
Start Test run() thread name = MainThread, thread id = 3920 thread name = MainThread, thread id = 3920 thread name = MainThread, thread id = 3920 thread name = MainThread, thread id = 3920 thread name = MainThread, thread id = 3920 thread name = MainThread, thread id = 3920 run() test end
4 使用start()方法启动了两个新的子线程并交替运行,每个子进程ID也不同。
import threading,time def worker(): count = 1 while True: if count >= 4: break time.sleep(2) count += 1 print(“thread name = {}, thread id = {}”.format(threading.current_thread().name, threading.current_thread().ident)) print(“Start Test start()”) t1 = threading.Thread(target=worker, name=“MyTryThread1”) t2 = threading.Thread(target=worker, name=“MyTryThread2”) t1.start() t2.start() t1.join() t2.join() print(“start() test end”)
运行结果:
Start Test start() thread name = MyTryThread1, thread id = 4628 thread name = MyTryThread2, thread id = 872 thread name = MyTryThread1, thread id = 4628 thread name = MyTryThread2, thread id = 872 thread name = MyTryThread1, thread id = 4628 thread name = MyTryThread2, thread id = 872 start() test end
补充知识:python 文件操作常用轮子
path
注意: 对于任何需要处理文件名的问题,都应该使用os.path模块而不是字符串操作。两个原因,os.path能够处理移植性问题,如windows,linux。 另一个原因,不要重复造轮子
获取文件名
import os filename = os.path.basename(filepath) print(filename)
获取文件当前文件夹目录
filename = os.path.dirname(filepath)
同时获取文件夹和文件名
dirname, filename = os.path.split(filepath)
split 文件扩展名
path_without_ext, ext = os.path.splitext(filepath) # e.g 'hello/world/read.txt' then # path_without_ext = hello/world/read, ext = .txt
遍历文件夹下所有文件方法
import glob
pyfiles = glob.glob('*.py')
or
def getAllFiles(filePath, filelist=[]): for root, dirs, files in os.walk(filePath): for f in files: filelist.append(os.path.join(root, f)) print(f) return filelist
判断是否为文件 file
os.path.isfile('/etc/passwd')
判断是否为文件夹 folder
os.path.isdir('/etc/passwd')
是否是软链接
os.path.islink('/usr/local/bin/python3')
软链接真正指向的是
os.path.realpath('/usr/local/bin/python3')
size
获取文件大小
import os size = os.path.getsize(filepath) print(size)
获取文件夹大小
import os def getFileSize(filePath, size=0): for root, dirs, files in os.walk(filePath): for f in files: size += os.path.getsize(os.path.join(root, f)) print(f) return size print(getFileSize("."))
time
import time t1 = os.path.gettime('/etc/passwd') # t1 1272478234.0 t2 = time.ctime(t1) # t2 'Wed Apr 28 12:10:05 2010'
以上这篇Python run()函数和start()函数的比较和差别介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 群星.2003-存为爱2CD【环球】【WAV+CUE】
- 韩磊《试音天碟》高清音频[WAV+CUE]
- 邓涛《寂寞蒲公英(黑胶CD)》[WAV]
- 江志丰.2011-爱你的理由【豪记】【WAV+CUE
- 群星《传承-太平洋影音45周年纪念版 (CD2)》[320K/MP3][140.01MB]
- 群星《传承-太平洋影音45周年纪念版 (CD2)》[FLAC/分轨][293.29MB]
- 首首经典《滚石红人堂I 一人一首成名曲 4CD》[WAV+CUE][2.5G]
- s14上单t0梯度怎么排名 s14世界赛上单t0梯度排行榜
- tes目前进了几次s赛 LPL队伍tes参加全球总决赛次数总览
- 英雄联盟巅峰礼赠什么时候开始 2024巅峰礼赠活动时间介绍
- 冯骥发文谈睡觉重要性 网友打趣:求求你先做DLC
- 博主惊叹《少女前线2》万圣节大雷皮肤:这真能过审吗?
- 《生化危机8》夫人比基尼Mod再引骂战:夸张身材有错吗?
- 江蕙.1994-悲情歌声【点将】【WAV+CUE】
- 戴娆.2006-绽放【易柏文化】【WAV+CUE】