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模拟登陆阿里妈妈生成商品推广链接
Apr 03 Python
python中的多重继承实例讲解
Sep 28 Python
Python利用IPython提高开发效率
Aug 10 Python
Django视图之ORM数据库查询操作API的实例
Oct 27 Python
名片管理系统python版
Jan 11 Python
python实现停车管理系统
Nov 30 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 Python
python re模块匹配贪婪和非贪婪模式详解
Feb 11 Python
Python实现名片管理系统
Feb 14 Python
Python startswith()和endswith() 方法原理解析
Apr 28 Python
Python logging模块异步线程写日志实现过程解析
Jun 30 Python
Python中使用Lambda函数的5种用法
Apr 01 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/11/12 PHP
composer.lock文件的作用
2016/02/03 PHP
PHP编程实现计算抽奖概率算法完整实例
2017/08/09 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
2019/03/22 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
PHP7 新增常量
2021/03/09 PHP
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
DOM操作一些常用的属性汇总
2015/03/13 Javascript
jQuery实现预加载图片的方法
2015/03/17 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
JS实现的通用表单验证插件完整实例
2015/08/20 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
2015/09/20 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
js clearInterval()方法的定义和用法
2015/11/11 Javascript
Bootstrap布局组件应用实例讲解
2016/02/17 Javascript
很实用的js选项卡切换效果
2016/08/12 Javascript
AngularJS表单验证功能分析
2017/05/26 Javascript
Python实现批量下载图片的方法
2015/07/08 Python
python实现汉诺塔算法
2021/03/01 Python
Django-Model数据库操作(增删改查、连表结构)详解
2019/07/17 Python
python图的深度优先和广度优先算法实例分析
2019/10/26 Python
Python正则表达式学习小例子
2020/03/03 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
CSS3实现线性渐变用法示例代码详解
2020/08/07 HTML / CSS
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
2018/09/19 HTML / CSS
医科大学毕业生自荐信
2014/02/03 职场文书
小学作文评语大全
2014/04/21 职场文书
商业融资计划书
2014/04/29 职场文书
机电系毕业生求职信
2014/07/11 职场文书
2014年导购员工作总结
2014/11/18 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书
Windows11里微软已经将驱动程序安装位置A盘删除
2021/11/21 数码科技
新的CSS 伪类函数 :is() 和 :where()示例详解
2022/08/05 HTML / CSS