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装饰器
Jun 15 Python
python获取多线程及子线程的返回值
Nov 15 Python
基于Django与ajax之间的json传输方法
May 29 Python
python用match()函数爬数据方法详解
Jul 23 Python
关于pytorch中网络loss传播和参数更新的理解
Aug 20 Python
python3使用GUI统计代码量
Sep 18 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
Oct 24 Python
python实现布隆过滤器及原理解析
Dec 08 Python
PyTorch使用cpu加载模型运算方式
Jan 13 Python
Python3的socket使用方法详解
Feb 18 Python
python爬虫使用requests发送post请求示例详解
Aug 05 Python
Python实现中英文全文搜索的示例
Dec 04 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
浅析使用Turck-mmcache编译来加速、优化PHP代码
2013/06/20 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
2014/06/05 PHP
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
[原创]php简单防盗链验证实现方法
2016/07/09 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
Javascript 模式实例 观察者模式
2009/10/24 Javascript
基于jquery自己写tab滑动门(通用版)
2012/10/30 Javascript
js前台分页显示后端JAVA数据响应
2013/03/18 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
jQuery简单实现验证邮箱格式
2015/07/15 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
深入理解Vue keep-alive及实践总结
2019/08/21 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
Python中read()、readline()和readlines()三者间的区别和用法
2017/07/30 Python
python根据unicode判断语言类型实例代码
2018/01/17 Python
python代码编写计算器小程序
2020/03/30 Python
基于jupyter代码无法在pycharm中运行的解决方法
2020/04/21 Python
python实现批处理文件
2020/07/28 Python
python -v 报错问题的解决方法
2020/09/15 Python
意大利领先的线上奢侈品销售电商:Eleonora Bonucci
2017/10/17 全球购物
俄罗斯购买剧院和演唱会门票网站:Parter.ru
2019/11/09 全球购物
奥地利婴儿用品和玩具购物网站:baby-markt.at
2020/01/26 全球购物
国际贸易专业个人求职信格式
2014/02/02 职场文书
员工工作表现评语
2014/04/26 职场文书
大学生求职计划书
2014/04/30 职场文书
高中美术教师事迹材料
2014/08/22 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
围城读书笔记
2015/06/26 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书
Python实现简单的俄罗斯方块游戏
2021/09/25 Python
使用RedisTemplat实现简单的分布式锁
2021/11/20 Redis
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB