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基础教程之实现石头剪刀布游戏示例
Feb 11 Python
PYTHON压平嵌套列表的简单实现
Jun 08 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
Sep 18 Python
一步步教你用Python实现2048小游戏
Jan 19 Python
python将unicode转为str的方法
Jun 21 Python
Python学习教程之常用的内置函数大全
Jul 14 Python
使用python实现knn算法
Dec 20 Python
教你使用python实现微信每天给女朋友说晚安
Mar 23 Python
利用Python如何实现一个小说网站雏形
Nov 23 Python
Python小工具之消耗系统指定大小内存的方法
Dec 03 Python
Django框架之登录后自定义跳转页面的实现方法
Jul 18 Python
一劳永逸彻底解决pip install慢的办法
May 24 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中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
2012/11/01 PHP
php+mysqli事务控制实现银行转账实例
2015/01/29 PHP
PHP的openssl加密扩展使用小结(推荐)
2016/07/18 PHP
php基于curl重写file_get_contents函数实例
2016/11/08 PHP
php接口隔离原则实例分析
2019/11/11 PHP
Javascript - HTML的request类
2007/01/09 Javascript
HTML node相关的一些资料整理
2010/01/01 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
JS 毫秒转时间示例代码
2013/09/22 Javascript
Javascript高级技巧分享
2014/02/25 Javascript
jquery获取当前点击对象的value方法
2014/02/28 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
jquery实现网页的页面平滑滚动效果代码
2015/11/02 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
React学习之事件绑定的几种方法对比
2017/09/24 Javascript
基于vue实现可搜索下拉框定制组件
2020/03/26 Javascript
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
Python性能优化的20条建议
2014/10/25 Python
使用SAE部署Python运行环境的教程
2015/05/05 Python
Python正确重载运算符的方法示例详解
2017/08/27 Python
Python语言的变量认识及操作方法
2018/02/11 Python
Python中分支语句与循环语句实例详解
2018/09/13 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
2019/04/28 Python
Python使用Turtle库绘制一棵西兰花
2019/11/23 Python
基于python中__add__函数的用法
2019/11/25 Python
20佳惊艳的HTML5应用程序示例分享
2011/05/03 HTML / CSS
英国轻奢珠宝品牌:Astley Clarke
2016/12/18 全球购物
PHP如何自定义函数
2016/09/16 面试题
儿科主治医生个人求职信
2013/09/23 职场文书
大专计算机个人求职的自我评价
2013/10/21 职场文书
委托书样本
2014/04/02 职场文书
学历公证委托书
2014/04/09 职场文书
2014教师年度工作总结
2014/11/10 职场文书
试用期工作表现自我评价
2015/03/06 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书