Python run()函数和start()函数的比较和差别介绍
run() 方法并不启动一个新线程,就是在主线程中调用了一个普通函数而已。
start() 方法是启动一个子线程,线程名就是自己定义的name。
因此,如果你想启动多线程,就必须使用start()方法。
请看实例:(源代码)
1 使用run()方法启动线程,它打印的线程名是MainThread,也就是主线程。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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”) |
运行结果:
1 2 3 4 5 | Start Test run() thread name = MainThread thread name = MainThread thread name = MainThread run() test end |
2 使用start()方法启动的线程名是我们定义线程对象时设置的name="MyThread"的值,如果没有设置name参数值,则会打印系统分配的Thread-1,Thread-2…这样的名称。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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”) |
运行结果:
1 2 3 4 5 | Start Test start() thread name = MyTryThread thread name = MyTryThread thread name = MyTryThread start() test end |
3 两个子线程都用run()方法启动,但却是先运行t1.run(),运行完之后才按顺序运行t2.run(),两个线程都工作在主线程,没有启动新线程,thread ID都是一样的,因此,run()方法仅仅是普通函数调用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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”) |
运行结果:
1 2 3 4 5 6 7 8 | 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也不同。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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”) |
运行结果:
1 2 3 4 5 6 7 8 | 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。 另一个原因,不要重复造轮子
获取文件名
获取文件当前文件夹目录
filename = os.path.dirname(filepath)
同时获取文件夹和文件名
dirname, filename = os.path.split(filepath)
split 文件扩展名
1 2 3 | 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
1 2 3 4 5 6 | 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
获取文件大小
获取文件夹大小
1 2 3 4 5 6 7 8 9 10 | 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
1 2 3 4 5 | 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()函数的比较和差别介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
相关文章
Python判断对象是否为文件对象(file object)的三种方法示例
这篇文章主要介绍了Python判断对象是否为文件对象(file object)的三种方法示例,https://www.pythontab.com/html/2018/pythonhexinbiancheng_1015/1362.html2019-04-04
最新评论