最近看了一下《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...