python多執行緒程式設計

2021-10-02 03:37:56 字數 3015 閱讀 6935

本文主要學習的執行緒模組是在python3.7版本環境中的threading模組,不涉及另外的乙個執行緒模組 _thread。

執行緒模組中的屬性和方法

import threading

dir(threading) # 下面列表為返回資料

['barrier', 'boundedsemaphore', 'brokenbarriererror', 'condition', 'event', 'lock', 'rlock', 'semaphore', 'timeout_max', 'thread', 'threaderror', 'timer', 'weakset', '_crlock', '_dummythread', '_mainthread', '_pyrlock', '_rlock', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_active', '_active_limbo_lock', '_after_fork', '_allocate_lock', '_count', '_counter', '_dangling', '_deque', '_enumerate', '_format_exc', '_islice', '_limbo', '_main_thread', '_newname', '_os', '_picksomenondaemonthread', '_profile_hook', '_set_sentinel', '_shutdown', '_start_new_thread', '_sys', '_time', '_trace_hook', 'activecount', 'active_count', 'currentthread', 'current_thread', 'enumerate', 'get_ident', 'local', 'main_thread', 'setprofile', 'settrace', 'stack_size']

常用類

threading.thread

常用方法

threading.enumerate()

返回乙個包含正在執行的執行緒的列表(主線程和子執行緒),正在執行指執行緒啟動後、結束前,不包括啟動前和終止後的執行緒。

threading.thread類中方法

run方法:執行緒啟動後,自動執行該方法

類例項方法:

start:開啟執行緒

join:等待執行緒結束

執行緒建立所用類為threading.thread,有兩種方法:1、直接建立,2、建立新類,繼承threading.thread類,重寫run方法

**實現1,直接建立執行緒

import threading

import time

def t1(t):

for i in t:

print(i)

time.sleep(1)

def t2(t):

for i in t:

print(i)

time.sleep(1)

def main():

t11 = threading.thread(target=t1, args=([1, 2, 3],))

t22 = threading.thread(target=t2, args=([4, 5, 6],))

#print(id(t11))

#print(id(t22))

t11.start()

t22.start()

while true:

print(threading.enumerate())

if len(threading.enumerate()) <= 1:

break

time.sleep(0.5)

if __name__ == '__main__':

main()

可以發現,t11和t22兩個執行緒是同時執行(併發)的,多次執行後 發現:cpu交替執行兩個執行緒,二者的先後順序是不確定(隨機)的,多執行緒可以共享全域性變數

**實現2,類繼承與方法重寫

import threading, time

ct = 1

class t(threading.thread):

def __init__(self):

super().__init__()

def run(self):

global ct

for i in range(3):

ct = ct+1

time.sleep(0.5)

print(ct)

if __name__ == '__main__':

t = t()

t.start()

t.join()

print('end.')

從上面**可以看到,join方法會等待子執行緒結束,再執行主線程的print方法,所以join方法可以在一定程度上 使**順序執行。

這裡的執行順序指的是 主線程和子執行緒的執行順序。

通常情況下,主線程會等待子執行緒執行,當所有子執行緒結束後,主線程才會繼續後面的操作 直到結束,也可以人為改變這個順序,即主線程無需等待子執行緒結束,實現的方法是 設定守護執行緒。

def demo():

for i in range(3):

print("hello world")

time.sleep(1)

if __name__ == '__main__':

t = threading.thread(target=demo)

# 守護執行緒,不會等子執行緒結束

t.setdaemon(true)

t.start()

print('end.')

python 多執行緒程式設計

一 執行緒基礎 1 建立執行緒 thread模組提供了start new thread函式,用以建立執行緒。start new thread函式成功建立後還可以對其進行操作。其函式原型 start new thread function,atgs kwargs 其引數含義如下 args 元組形式的引...

python 多執行緒程式設計

一 執行緒基礎 1 建立執行緒 thread模組提供了start new thread函式,用以建立執行緒。start new thread函式成功建立後還能夠對其進行操作。其函式原型 start new thread function,atgs kwargs 其引數含義例如以下 args 元組形式...

Python多執行緒程式設計

import threading import time deffunc name time.sleep 3 print 子執行緒 s 啟動 threading.current thread name print hello name print 子執行緒 s 結束 threading.curren...