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 相关文章推荐
Django与JS交互的示例代码
Aug 23 Python
python递归打印某个目录的内容(实例讲解)
Aug 30 Python
Python基于动态规划算法解决01背包问题实例
Dec 06 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
利用Python实现微信找房机器人实例教程
Mar 10 Python
Python3模拟登录操作实例分析
Mar 12 Python
在linux下实现 python 监控usb设备信号
Jul 03 Python
django实现类似触发器的功能
Nov 15 Python
如何在Python 游戏中模拟引力
Mar 27 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
May 19 Python
Pandas加速代码之避免使用for循环
May 30 Python
Pygame Event事件模块的详细示例
Nov 17 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
Yii框架自定义数据库操作组件示例
2019/11/11 PHP
基于jQuery的日期选择控件
2009/10/27 Javascript
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
vue实现绑定事件的方法实例代码详解
2019/06/20 Javascript
jquery.pager.js实现分页效果
2019/07/29 jQuery
JS三级联动代码格式实例详解
2019/12/30 Javascript
Vue 实现简易多行滚动"弹幕"效果
2020/01/02 Javascript
ES6函数和数组用法实例分析
2020/05/23 Javascript
JS实现电脑虚拟键盘打字测试
2020/06/24 Javascript
[02:06]DOTA2肉山黑名单魔法终结者 敌法师中文配音鉴赏
2013/06/17 DOTA
[28:05]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第一场 10月30日
2020/10/31 DOTA
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
python:HDF和CSV存储优劣对比分析
2020/06/08 Python
python开发前景如何
2020/06/11 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
python 实现的车牌识别项目
2021/01/25 Python
HTML5 Canvas 实现K线图的示例代码
2019/12/23 HTML / CSS
打造经典复古风格的品牌:Alice + Olivia(爱丽丝+奥利维亚)
2016/09/07 全球购物
秋季运动会加油稿200字
2014/01/11 职场文书
函授本科自我鉴定
2014/02/04 职场文书
烹饪自我鉴定
2014/03/01 职场文书
元旦获奖感言
2014/03/08 职场文书
销售竞赛活动方案
2014/08/23 职场文书
2014最新版群众路线四风整改措施
2014/09/24 职场文书
初中成绩单评语
2014/12/29 职场文书
vue中三级导航的菜单权限控制
2021/03/31 Vue.js
详解vue身份认证管理和租户管理
2021/05/25 Vue.js
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL