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搭建Django应用程序步骤及版本冲突问题解决
Nov 19 Python
Python入门篇之字典
Oct 17 Python
关于Python 3中print函数的换行详解
Aug 08 Python
django中静态文件配置static的方法
May 20 Python
python绘制中国大陆人口热力图
Nov 07 Python
pytz格式化北京时间多出6分钟问题的解决方法
Jun 21 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
Apr 16 Python
从0到1使用python开发一个半自动答题小程序的实现
May 12 Python
利用python对excel中一列的时间数据更改格式操作
Jul 14 Python
python使用yaml 管理selenium元素的示例
Dec 01 Python
python实现简单反弹球游戏
Apr 12 Python
python神经网络Xception模型
May 06 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时的知识积累总结
2013/06/07 PHP
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
JS 动态加载脚本的4种方法
2009/05/05 Javascript
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
Jquery实战_读书笔记2 选择器
2010/01/22 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
AngularJS手动表单验证
2016/02/01 Javascript
一个例子轻松学会Vue.js
2017/01/02 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
node通过npm写一个cli命令行工具
2017/10/12 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
Openlayers绘制聚合标注
2020/09/28 Javascript
javascript实现左右缓动动画函数
2020/11/25 Javascript
pycharm 使用心得(一)安装和首次使用
2014/06/05 Python
python实现爬虫下载美女图片
2015/07/14 Python
Python实现读取文件最后n行的方法
2017/02/23 Python
python删除本地夹里重复文件的方法
2020/11/19 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
YUV转为jpg图像的实现
2019/12/09 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
python实现人脸签到系统
2020/04/13 Python
python 通过 pybind11 使用Eigen加速代码的步骤
2020/12/07 Python
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
介绍一下Linux文件的记录形式
2013/09/29 面试题
产品生产计划书
2014/05/07 职场文书
测控技术自荐信
2014/06/05 职场文书
节约用电标语
2014/06/17 职场文书
党的群众路线教育实践活动实施方案
2014/10/31 职场文书
2014年图书馆个人工作总结
2014/12/18 职场文书
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android