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实现批量重命名文件的代码
May 25 Python
python批量修改文件名的实现代码
Sep 01 Python
Python中的ConfigParser模块使用详解
May 04 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
Dec 18 Python
python 日期操作类代码
May 05 Python
Python快速查找list中相同部分的方法
Jun 27 Python
Face++ API实现手势识别系统设计
Nov 21 Python
python 字典操作提取key,value的方法
Jun 26 Python
python进程的状态、创建及使用方法详解
Dec 06 Python
手动安装python3.6的操作过程详解
Jan 13 Python
Python类的动态绑定实现原理
Mar 21 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 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日历制作代码分享
2014/01/20 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
2016/07/06 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
2017/08/17 PHP
Js动态创建div
2008/09/25 Javascript
基于jQuery的消息提示插件 DivAlert之旅(二)
2010/04/01 Javascript
js jquery获取随机生成id的服务器控件的三种方法
2013/07/11 Javascript
Jquery实现纵向横向菜单
2016/01/24 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
2016/05/24 Javascript
jQuery UI插件实现百度提词器效果
2016/11/21 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
详解AngularJS2 Http服务
2017/06/26 Javascript
代码分析vue中如何配置less
2018/09/28 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
2018/12/02 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
2019/03/28 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
2019/12/07 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
[51:11]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS DT
2014/05/22 DOTA
[01:02:45]完美世界DOTA2联赛 LBZS vs Forest 第三场 11.07
2020/11/09 DOTA
Python字符编码判断方法分析
2016/07/01 Python
在python中实现对list求和及求积
2018/11/14 Python
python Elasticsearch索引建立和数据的上传详解
2019/08/04 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
python中str内置函数用法总结
2020/12/27 Python
python和opencv构建运动检测器的实现
2021/03/03 Python
HTML5不支持标签和新增标签详解
2016/06/27 HTML / CSS
德国综合购物网站:OTTO
2018/11/13 全球购物
实习生个人的自我评价
2013/12/08 职场文书
大学生自我鉴定范文
2013/12/28 职场文书
网络事业创业计划书范文
2014/01/09 职场文书
会计助理岗位职责
2014/02/17 职场文书
工商局个人工作总结
2015/03/03 职场文书
大学生军训心得体会5篇
2019/08/15 职场文书