Python執行緒(二)之同步與非同步

2021-08-18 21:26:10 字數 2768 閱讀 4438

同步:就是協同步調,按預定的先後次序進行執行。如:你說完,我再說。

「同」字從字面上容易理解為一起動作

其實不是,」同」字應是指協同、協助、互相配合。

如程序、執行緒同步,可理解為程序或執行緒a和b一塊配合,a執行到一定程度時要依靠b的某個結果,於是停下來,示意b執行;b依言執行,再將結果給a;a再繼續操作

多個執行緒有序執行

from threading import thread,lock

from time import sleep

class

task1

(thread):

defrun

(self):

while

true:

if lock1.acquire():

print("------task 1 -----")

sleep(0.5)

lock2.release()

class

task2

(thread):

defrun

(self):

while

true:

if lock2.acquire():

print("------task 2 -----")

sleep(0.5)

lock3.release()

class

task3

(thread):

defrun

(self):

while

true:

if lock3.acquire():

print("------task 3 -----")

sleep(0.5)

lock1.release()

#使用lock建立出的鎖預設沒有「鎖上」

lock1 = lock()

#建立另外一把鎖,並且「鎖上」

lock2 = lock()

lock2.acquire()

#建立另外一把鎖,並且「鎖上」

lock3 = lock()

lock3.acquire()

t1 = task1()

t2 = task2()

t3 = task3()

t1.start()

t2.start()

t3.start()

執行結果:

這--

----

task1-

----

----

--task2-

----

----

--task3-

----

----

--task1-

----

----

--task2-

----

----

--task3-

----

----

--task1-

----

----

--task2-

----

----

--task3-

----

----

--task1-

----

----

--task2-

----

----

--task3-

----

----

--task1-

----

----

--task2-

----

----

--task3-

----

總結

可以使用互斥鎖完成多個任務,有序的程序工作,這就是執行緒的同步

非同步:

非同步呼叫就是你 喊 你朋友吃飯 ,你朋友說知道了 ,待會忙完去找你 ,你就去做別的了。

from multiprocessing import pool

import time

import os

deftest

(): print("---程序池中的程序---pid=%d,ppid=%d--"%(os.getpid(),os.getppid()))

for i in range(3):

print("----%d---"%i)

time.sleep(1)

return

"hahah"

deftest2

(args):

print("---callback func--pid=%d"%os.getpid())

print("---callback func--args=%s"%args)

pool = pool(3)

time.sleep(5)

print("----主程序-pid=%d----"%os.getpid())

執行結果:

這--

-程序池中的程序--

-pid=9401

,ppid=9400--

----

0---

----

1---

----

2---

---callback

func--

pid=9400--

-callback

func--

args=hahah--

--主程序-

pid=9400--

--

執行緒同步與非同步

多執行緒併發時,多個執行緒同時請求同乙個資源,必然導致此資源的資料不安全,a執行緒修改了b線 程的處理的資料,而b執行緒又修改了a執行緒處理的數理。顯然這是由於全域性資源造成的,有時為了解 決此問題,優先考慮使用區域性變數,退而求其次使用同步 塊,出於這樣的安全考慮就必須犧牲 系統處理效能,加在多執...

同步與非同步(執行緒)

有兩個執行緒在併發執行以下 段,其中 g 是 int 型別的全域性變數。請 問當兩個執行緒都執行完畢該 段後,g 的值的取值範圍為50000 100000。for int i 1 i 50000 i 當多個控制線程共享內容的記憶體時,需要確保每個執行緒看到一致的資料檢視。如果每個執行緒使用的變數都是...

python程序與執行緒,同步與非同步,並行併發

from multiprocessing import process,pool import os import time class myprocess process def init self,wtime process.init self self.wtime wtime defrun s...