1. 程式人生 > 程式設計 >Python run()函式和start()函式的比較和差別介紹

Python run()函式和start()函式的比較和差別介紹

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
run() test end

4 使用start()方法啟動了兩個新的子執行緒並交替執行,每個子程序ID也不同。

import threading,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 = 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,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()函式的比較和差別介紹就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。