Python run()函数和start()函数的比较和差别介绍
run()方法并不启动一个新线程,就是在主线程中调用了一个普通函数而已。
start()方法是启动一个子线程,线程名就是自己定义的name。
因此,如果你想启动多线程,就必须使用start()方法。
请看实例:(源代码)
1使用run()方法启动线程,它打印的线程名是MainThread,也就是主线程。
importthreading,time defworker(): count=1 whileTrue: ifcount>=4: break time.sleep(1) count+=1 print(“threadname={}”.format(threading.current_thread().name)) print(“StartTestrun()”) t1=threading.Thread(target=worker,name=“MyTryThread”) t1.run() print(“run()testend”)
运行结果:
StartTestrun() threadname=MainThread threadname=MainThread threadname=MainThread run()testend
2使用start()方法启动的线程名是我们定义线程对象时设置的name="MyThread"的值,如果没有设置name参数值,则会打印系统分配的Thread-1,Thread-2…这样的名称。
importthreading,time defworker(): count=1 whileTrue: ifcount>=4: break time.sleep(2) count+=1 print(“threadname={}”.format(threading.current_thread().name))#当前线程名 print(“StartTeststart()”) t=threading.Thread(target=worker,name=“MyTryThread”) t.start() t.join() print(“start()testend”)
运行结果:
StartTeststart() threadname=MyTryThread threadname=MyTryThread threadname=MyTryThread start()testend
3两个子线程都用run()方法启动,但却是先运行t1.run(),运行完之后才按顺序运行t2.run(),两个线程都工作在主线程,没有启动新线程,threadID都是一样的,因此,run()方法仅仅是普通函数调用。
importthreading,time defworker(): count=1 whileTrue: ifcount>=4: break time.sleep(2) count+=1 print(“threadname={},threadid={}”.format(threading.current_thread().name, threading.current_thread().ident)) print(“StartTestrun()”) t1=threading.Thread(target=worker,name=“t1”) t2=threading.Thread(target=worker,name=‘t2') t1.run() t2.run() print(“run()testend”)
运行结果:
StartTestrun() threadname=MainThread,threadid=3920 threadname=MainThread,threadid=3920 threadname=MainThread,threadid=3920 threadname=MainThread,threadid=3920 threadname=MainThread,threadid=3920 threadname=MainThread,threadid=3920 run()testend
4使用start()方法启动了两个新的子线程并交替运行,每个子进程ID也不同。
importthreading,time defworker(): count=1 whileTrue: ifcount>=4: break time.sleep(2) count+=1 print(“threadname={},threadid={}”.format(threading.current_thread().name, threading.current_thread().ident)) print(“StartTeststart()”) t1=threading.Thread(target=worker,name=“MyTryThread1”) t2=threading.Thread(target=worker,name=“MyTryThread2”) t1.start() t2.start() t1.join() t2.join() print(“start()testend”)
运行结果:
StartTeststart() threadname=MyTryThread1,threadid=4628 threadname=MyTryThread2,threadid=872 threadname=MyTryThread1,threadid=4628 threadname=MyTryThread2,threadid=872 threadname=MyTryThread1,threadid=4628 threadname=MyTryThread2,threadid=872 start()testend
补充知识:python文件操作常用轮子
path
注意:对于任何需要处理文件名的问题,都应该使用os.path模块而不是字符串操作。两个原因,os.path能够处理移植性问题,如windows,linux。另一个原因,不要重复造轮子
获取文件名
importos 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
遍历文件夹下所有文件方法
importglob
pyfiles=glob.glob('*.py')
or
defgetAllFiles(filePath,filelist=[]): forroot,dirs,filesinos.walk(filePath): forfinfiles: filelist.append(os.path.join(root,f)) print(f) returnfilelist
判断是否为文件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
获取文件大小
importos size=os.path.getsize(filepath) print(size)
获取文件夹大小
importos defgetFileSize(filePath,size=0): forroot,dirs,filesinos.walk(filePath): forfinfiles: size+=os.path.getsize(os.path.join(root,f)) print(f) returnsize print(getFileSize("."))
time
importtime t1=os.path.gettime('/etc/passwd') #t11272478234.0 t2=time.ctime(t1) #t2'WedApr2812:10:052010'
以上这篇Pythonrun()函数和start()函数的比较和差别介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。