Python run()函数和start()函数的比较和差别介绍


Posted in Python onMay 03, 2020

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()函数的比较和差别介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
django自定义Field实现一个字段存储以逗号分隔的字符串
Apr 27 Python
Python模拟登录验证码(代码简单)
Feb 06 Python
12步教你理解Python装饰器
Feb 25 Python
python利用有道翻译实现"语言翻译器"的功能实例
Nov 14 Python
快速查询Python文档方法分享
Dec 27 Python
PyQt5根据控件Id获取控件对象的方法
Jun 25 Python
python之拟合的实现
Jul 19 Python
Python dict和defaultdict使用实例解析
Mar 12 Python
用 Django 开发一个 Python Web API的方法步骤
Dec 03 Python
python 可视化库PyG2Plot的使用
Jan 21 Python
OpenCV全景图像拼接的实现示例
Jun 05 Python
总结三种用 Python 作为小程序后端的方式
May 02 Python
对python中arange()和linspace()的区别说明
May 03 #Python
python 等差数列末项计算方式
May 03 #Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
May 03 #Python
Python定义函数实现累计求和操作
May 03 #Python
Python实现汇率转换操作
May 03 #Python
Python定时从Mysql提取数据存入Redis的实现
May 03 #Python
python函数调用,循环,列表复制实例
May 03 #Python
You might like
PHP新手上路(八)
2006/10/09 PHP
php利用单例模式实现日志处理类库
2014/02/10 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
2014/06/25 PHP
smarty模板引擎从php中获取数据的方法
2015/01/22 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
PHP实现大数(浮点数)取余的方法
2017/02/18 PHP
laravel 解决Validator使用中出现的问题
2019/10/25 PHP
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
jquery果冻抖动效果实现方法
2015/01/15 Javascript
JavaScript学习小结(一)——JavaScript入门基础
2015/09/02 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
深入浅出webpack之externals的使用
2017/12/04 Javascript
微信小程序日历/日期选择插件使用方法详解
2018/12/28 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
分享15个最受欢迎的Python开源框架
2014/07/13 Python
Python的Flask框架与数据库连接的教程
2015/04/20 Python
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
python查看列的唯一值方法
2018/07/17 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
HTML5表单验证特性(知识点小结)
2020/03/10 HTML / CSS
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
意大利咖啡、浓缩咖啡和浓缩咖啡机:illy caffe
2019/03/20 全球购物
Lookfantastic澳大利亚官网:英国知名美妆购物网站
2021/01/07 全球购物
综合素质的自我鉴定
2013/10/07 职场文书
证婚人经典证婚词
2014/01/09 职场文书
项目管理计划书
2014/01/09 职场文书
运动会方阵解说词
2014/02/12 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
《西门豹》教学反思
2016/02/23 职场文书
Redis可视化客户端小结
2021/06/10 Redis
十大最强飞行系宝可梦,BUG燕上榜,第二是飞行系王者
2022/03/18 日漫