Python 並行程式設計 多執行緒

2021-09-21 14:58:11 字數 2137 閱讀 8145

最近看了一下《python並行程式設計手冊》,雖然這本書薄薄的,包含內容挺多,但是有很多地方講的不清楚,而且有一些bug出現,講道理不推薦看這本書,但是我也隨手翻完了,**也寫著玩,總結一下python並行程式設計,順便寫一寫書裡有問題的地方。這本書的問題過多,不建議閱讀!!!尤其是mpi4py之後的內容。。。。。。(棄坑)

threading是python標準庫的執行緒模組,可以利用threading進行直接建立執行緒,或者新建乙個類繼承threading類,下面是書上這兩種方式的實現**:

import threading

deffunc

(i,j)

:print

("function called by thread %i %\n"

%(i,j)

)threads =

for i in

range(5

):#這裡我新增了乙個引數,傳遞兩個引數

t = threading.thread(target = func,args =

(i,i+1)

)#新建執行緒物件

#新增到佇列中

t.start(

)# 開始執行緒

t.join(

)#使主線程等待子執行緒完成

import threading

import time

exitflag =

0#該程式中沒有太大作用

class

mythread

(threading.thread)

:def

__init__

(self,threadid,name,counter)

: threading.thread.__init__(self)

self.threadid = threadid

self.name = name

self.counter = counter

defrun(self)

:print

("threading "

+ self.name +

" start"

) print_time(self.name,self.counter,5)

print

("exiting "

+ self.name)

defprint_time

(threadname,delay,counter)

:while counter:

if exitflag:

thread.exit(

) time.sleep(delay)

print

("%s: %s"

%(threadname,time.ctime(time.time())

))counter-=

1thread1 = mythread(1,

"thread-1",1

)thread2 = mythread(2,

"thread-2",2

)thread1.start(

)thread2.start(

)thread1.join(

)#書上並有進行join,所以下面這一行話會在

thread2.join(

)#程式一開始就彈出,之後才是兩個執行緒的輸出內容

print

("exiting main thread"

)

當併發執行緒的兩個或多個操作嘗試訪問共享記憶體,並且至少有乙個操作想要修改資料的狀態時沒有適當的同步機制,就會導致競態條件。解決競態條件的最簡單方法就是使用鎖機制。

執行緒a訪問資源a的時候,就會將a資源上鎖,完成操作後,就把鎖釋放掉。

兩個人一起在餐廳吃飯,a拿著叉子,b拿著勺子。a,b都不願意自己手裡什麼都沒有,但是a想喝湯,b想吃意麵,兩個人都不願意把餐具先給對方,結果兩個人就一直乾耗下去,長長久久,但是餐廳的桌子就那麼幾張,ab就一直佔著這張桌子,這就是死鎖。

記得還有乙個關於死鎖很好玩的故事,乙個應聘生去面試,hr問他,請你解釋一下什麼是死

鎖,應聘生說,你發給我offer,我就告訴你什麼是死鎖。

在多執行緒程式設計中,死鎖肯定是重點關注的問題之一。

finished…

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...