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 相关文章推荐
python中os操作文件及文件路径实例汇总
Jan 15 Python
Windows和Linux下使用Python访问SqlServer的方法介绍
Mar 10 Python
python查询sqlite数据表的方法
May 08 Python
Python 模块EasyGui详细介绍
Feb 19 Python
Python线程创建和终止实例代码
Jan 20 Python
Python matplotlib的使用并自定义colormap的方法
Dec 13 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 Python
OpenCV 边缘检测
Jul 10 Python
pandas按行按列遍历Dataframe的几种方式
Oct 23 Python
TensorFlow学习之分布式的TensorFlow运行环境
Feb 05 Python
python如何进入交互模式
Jul 06 Python
解析目标检测之IoU
Jun 26 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/12/05 PHP
PHP中应该避免使用同名变量(拆分临时变量)
2015/04/03 PHP
如何使用PHP对网站验证码进行破解
2015/09/17 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
jQuery EasyUI中对表格进行编辑的实现代码
2010/06/10 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
Centos7 中 Node.js安装简单方法
2016/11/02 Javascript
javascript中call,apply,bind函数用法示例
2016/12/19 Javascript
JS 实现随机验证码功能
2017/02/15 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
2017/02/23 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
记一次webapck4 配置文件无效的解决历程
2018/09/19 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
[02:56]DOTA2上海特锦赛小组赛解说FreeAgain采访花絮
2016/02/27 DOTA
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
简单谈谈Python中函数的可变参数
2016/09/02 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
浅谈keras使用中val_acc和acc值不同步的思考
2020/06/18 Python
python使用多线程查询数据库的实现示例
2020/08/17 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
使用html2canvas实现将html内容写入到canvas中生成图片
2020/01/03 HTML / CSS
新西兰航空中国官网:Air New Zealand China
2018/07/24 全球购物
什么是索引指示器
2012/08/20 面试题
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
大学班级计划书
2014/04/29 职场文书
品牌推广活动策划方案
2014/08/19 职场文书
2015年加油站站长工作总结
2015/05/27 职场文书
MySQL之DML语言
2021/04/05 MySQL
python3 删除所有自定义变量的操作
2021/04/08 Python
CocosCreator ScrollView优化系列之分帧加载
2021/04/14 Python
MySQL数据库⾼可⽤HA实现小结
2022/01/22 MySQL