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共享引用(多个变量引用)示例代码
Dec 04 Python
Python使用urllib2模块实现断点续传下载的方法
Jun 17 Python
python利用正则表达式提取字符串
Dec 08 Python
pycharm在调试python时执行其他语句的方法
Nov 29 Python
15行Python代码实现网易云热门歌单实例教程
Mar 10 Python
Python实现微信机器人的方法
Sep 06 Python
详解基于python的多张不同宽高图片拼接成大图
Sep 26 Python
Python队列、进程间通信、线程案例
Oct 25 Python
关于python pycharm中输出的内容不全的解决办法
Jan 10 Python
python_mask_array的用法
Feb 18 Python
Python常用编译器原理及特点解析
Mar 23 Python
python 实现学生信息管理系统的示例
Nov 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 得到根目录的 __FILE__ 常量
2008/07/23 PHP
PHP新手用的Insert和Update语句构造类
2012/03/31 PHP
php获得用户ip地址的比较不错的方法
2014/02/08 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
PHP 实现文件压缩解压操作的方法
2019/06/14 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
为数据添加append,remove功能
2006/10/03 Javascript
枚举JavaScript对象的函数
2006/12/22 Javascript
分享10个原生JavaScript技巧
2015/04/20 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
2015/05/15 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
微信小程序开发探究
2016/12/27 Javascript
js点击任意区域弹出层消失实现代码
2016/12/27 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
2017/04/01 Javascript
通过seajs实现JavaScript的模块开发及按模块加载
2019/06/06 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
Js on及addEventListener原理用法区别解析
2020/07/11 Javascript
python音频处理用到的操作的示例代码
2017/10/27 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
2017/12/03 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
python django中8000端口被占用的解决
2019/12/17 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
css3 边框、背景、文本效果的实现代码
2018/03/21 HTML / CSS
html5读取本地文件示例代码
2014/04/22 HTML / CSS
八项规定整改措施
2014/02/12 职场文书
《忆江南》教学反思
2014/04/07 职场文书
爱心倡议书范文
2014/05/12 职场文书
自强自立美德少年事迹材料
2014/08/16 职场文书
2014年医院工作总结
2014/11/20 职场文书
监理中标通知书
2015/04/16 职场文书