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 相关文章推荐
Python2.x中str与unicode相关问题的解决方法
Mar 30 Python
Python中endswith()函数的基本使用
Apr 07 Python
Python MySQLdb Linux下安装笔记
May 09 Python
Python遍历文件夹和读写文件的实现代码
Aug 28 Python
python的mysqldb安装步骤详解
Aug 14 Python
django使用html模板减少代码代码解析
Dec 12 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
Apr 19 Python
python调用OpenCV实现人脸识别功能
May 25 Python
解决ROC曲线画出来只有一个点的问题
Feb 28 Python
Python 线性回归分析以及评价指标详解
Apr 02 Python
Python matplotlib实时画图案例
Apr 23 Python
Python3+selenium配置常见报错解决方案
Aug 28 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中获取文件扩展名的N种方法小结
2012/02/27 PHP
PHP获取当前页面完整URL的实现代码
2013/06/10 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
2014/06/25 PHP
学习php设计模式 php实现工厂模式(factory)
2015/12/07 PHP
AES加解密在php接口请求过程中的应用示例
2016/10/26 PHP
magento后台无法登录解决办法的两种方法
2016/12/09 PHP
js 格式化时间日期函数小结
2010/03/20 Javascript
学习面向对象之面向对象的基本概念:对象和其他基本要素
2010/11/30 Javascript
jquery 提交值不为空的元素示例代码
2013/05/10 Javascript
js如何判断不同系统的浏览器类型
2013/10/28 Javascript
JQuery+Ajax无刷新分页的实例代码
2014/02/08 Javascript
JavaScript的null和undefined区别示例介绍
2014/09/15 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
2016/02/17 Javascript
Ionic如何实现下拉刷新与上拉加载功能
2016/06/03 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
vue实现商城上货组件简易版
2017/11/27 Javascript
Vue+Koa2+mongoose写一个像素绘板的实现方法
2019/09/10 Javascript
微信小程序实现3D轮播图效果(非swiper组件)
2019/09/21 Javascript
在Python中使用HTMLParser解析HTML的教程
2015/04/29 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
2018/04/18 Python
在cmd命令行里进入和退出Python程序的方法
2018/05/12 Python
python实现百度OCR图片识别过程解析
2020/01/17 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
Elizabeth Gage官网:英国最好的珠宝设计之一
2020/09/26 全球购物
物业公司采购员岗位职责
2013/12/31 职场文书
项目考察欢迎辞
2014/01/17 职场文书
审计局班子四风对照检查材料思想汇报
2014/10/07 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
个人年终总结怎么写
2015/03/09 职场文书
活动经费申请报告
2015/05/15 职场文书
2015年园林绿化工作总结
2015/05/23 职场文书
分享几种python 变量合并方法
2022/03/20 Python