python 執行緒程序協程(二)

2021-10-24 04:00:24 字數 3218 閱讀 6210

1.程序的基本使用:

from multiprocessing import process

class myprocess(process):

def run(self):

print(

'name:--pid:'.format(self.name, self.pid))

if __name__ ==

'__main__'

: p = myprocess(

) p.start(

) p.join(

)

控制台輸出:

name:myprocess-1--pid:45612
2.程序池:

from multiprocessing import process, current_process, pool

def func(num):

pid = current_process(

).pid

# 程序獲得pid和name可以直接用multiprocessing中的current_process

name = current_process(

).name

print(

'num:,pid:,name:'.format(num, pid, name))

if __name__ ==

'__main__'

: pool = pool(4)

n_list = range(100)

for n in n_list:

(n,))

pool.close(

) pool.join(

)

3.通過queue進行通訊:程序之間是相互隔離的,要實現程序間通訊,multiprocessing提供了佇列和管道的方式,管道不自動加鎖,此處使用的是佇列方式:

(一方通過put寫入資料,一方通過get獲得資料)

from multiprocessing import process,current_process,queue

class writeprocess(process):

def __init__(self, q, *args, **kwargs):

super(

).__init__(*args, **kwargs)

self.q = q

def run(self):

context =

['第一行內容',

'第二行內容',

'第三行內容'

]for each in context:

print(

'寫入內容:,名字:'.format(each, current_process(

).name))

self.q.put(each)

class readprocess(process):

def __init__(self, q, *args, **kwargs):

super(

).__init__(*args, **kwargs)

self.q = q

def run(self):

while true:

print(self.q.get(

))if __name__ ==

'__main__'

: q = queue(

)# 通過q來通訊

w = writeprocess(q)

r = readprocess(q)

w.start(

) r.start(

) w.join(

) r.terminate(

)# 由於讀的**寫的是死迴圈,且沒有再有子程序了,

# 所以使用terminate終止程式

4.程序鎖

同樣在class的定義中傳入lock,加鎖並釋放鎖,或者使用with操作:

from multiprocessing import process,current_process,queue,lock

import

time

class writeprocess(process):

def __init__(self, lock, num, *args, **kwargs):

super(

).__init__(*args, **kwargs)

# self.q = q

self.lock = lock

self.num = num

def run(self):

with self.lock:

for i in range(10):

with open(

'test2.txt', 'w', encoding=

'utf-8'

) as f:

context =

'寫入內容:i:, pid:, num:'.format(i, self.pid,self.num)

f.write(context)

f.write(

'\n'

) print(context)

time.sleep(2)

if __name__ ==

'__main__'

: lock = lock(

)for i in range(5):

w1 = writeprocess(lock,i)

w1.start(

)# 此處不用join,否則一條程序結束後才會起第二條程序

寫入內容:i:0, pid:65248, num:0

寫入內容:i:1, pid:65248, num:0

寫入內容:i:2, pid:65248, num:0

寫入內容:i:3, pid:65248, num:0

寫入內容:i:4, pid:65248, num:0

寫入內容:i:5, pid:65248, num:0

寫入內容:i:6, pid:65248, num:0

寫入內容:i:7, pid:65248, num:0

寫入內容:i:8, pid:65248, num:0

寫入內容:i:9, pid:65248, num:0

Python 程序 執行緒 協程

程序和執行緒之間的關係 執行緒是屬於程序的,執行緒執行在程序空間內,同一程序所產生的執行緒共享同一記憶體空間,當程序退出時該程序所產生的執行緒都會被強制退出並清除。執行緒可與屬於同一程序的其它執行緒共享程序所擁有的全部資源,但是其本身基本上不擁有系統資源,只擁有一點在執行中必不可少的資訊 如程式計數...

Python 程序,執行緒, 協程

程序是系統進行資源分配和排程的乙個獨立單位 最小單位 程序的幾個狀態 空 新建 建立執行乙個程式的新程序,可能的事件有 新的批處理作業 互動登入 終端使用者登入到系統 作業系統因為提供一項服務而建立 由現有的程序派生等。新建 就緒 作業系統準備好再接納乙個程序時,把乙個程序從新建態轉換為就緒態。就緒...

程序 執行緒 協程

多程序多執行緒的最終目地都是為了加快任務處理的時間,但是受限於cpu核數 只有多核才能實現並行,任務耗時 單核任務耗時 cpu核數 那麼在單核上執行多程序多執行緒是不是沒有用了,加快不了處理的速度了?答案肯定是不是的,不然這個東西設計出來太雞肋了,那它們加快處理的原理是什麼呢?乙個程序耗時 b程序耗...