python多程序關閉 python多程序操作例項

2021-10-11 20:30:23 字數 2644 閱讀 3421

由於cpython實現中的gil的限制,python中的多執行緒其實並不是真正的多執行緒,如果想要充分地使用多核cpu的資源,在python中大部分情況我們需要使用多程序。 這也許就是python中多程序類庫如此簡潔好用的原因所在。在python中可以向多執行緒一樣簡單地使用多程序。

一、多程序

process的成員變數和方法:

>>class multiprocessing.process([group[, target[, name[, args[, kwargs]]]]]) 來的定義類似於threading.thread。target表示此程序執行的函式,args和kwargs表示target的引數。

>>name, pid

分別表示程序的名字,程序id。

>> daemon成員

daemon標誌位bool變數,需要在start()呼叫前設定。daemon的初始值是從父程序繼承而來。當乙個程序結束的時候,它嘗試去結束它的所有的daemon子程序。

注意:daemon程序不允許建立子程序。否則當daemon程序結束的時候它的子程序不能被結束。

這裡的daemon不是unix的daemon程序,當父程序結束的時候所有的daemon子程序也將被終止(對於非daemon程序,父程序不等待非daemon的紫子程序,除非顯示地對非daemon子程序使用join()方法)。

>>  exitcode

如果程序還沒有退出,則為none,如果正確的退出則為0,如果有錯誤則為》0的錯誤**,如果程序為終止則為-1*singal。

>> start(), is_live(), terminate()

start()用來啟動程序,is_live()用來檢視程序的狀態,terminate()用來終止程序。

>> run()

可以在process的子類中過載run()方法,從而設定程序的任務。過載process是構造新程序的另一種方式,一定程度上上等價於process的target引數。

multiprcessing的靜態方法:

>>  multiprocessing.cpu_count()

用來獲得當前的cpu的核數,可以用來設定接下來子程序的個數。

>>  multiprocessing.active_children()

用來獲得當前所有的子程序,包括daemon和非daemon子程序。

例項:import multiprocessing

import time

import sys

def worker(num):

p = multiprocessing.current_process()

print ('starting:' + p.name + ":" + str(p.pid))

print(str(num))

sys.stdout.flush()

print ('exiting :' + p.name + ":" + str(p.pid))

sys.stdout.flush()

def daemon():

p = multiprocessing.current_process()

print ('starting:' + p.name + ":" + str(p.pid))

sys.stdout.flush()

time.sleep(10)

print ('exiting :' + p.name + ":" + str(p.pid))

sys.stdout.flush()

def non_daemon():

p = multiprocessing.current_process()

print ('starting:' + p.name + ":" + str(p.pid))

sys.stdout.flush()

time.sleep(20)

print ('exiting :' + p.name + ":" + str(p.pid))

sys.stdout.flush()

if __name__ == '__main__':

w = multiprocessing.process(name='worker', target=worker, args=(100,))

d = multiprocessing.process(name='daemon', target=daemon)

d.daemon = true

nd = multiprocessing.process(name='non-daemon', target=non_daemon)

w.start()

d.start()

nd.start()

print("the number of cpu is " + str(multiprocessing.cpu_count()))

print("all children processes:")

for p in multiprocessing.active_children():

print("child:" + p.name + ":" + str(p.pid))

print()

w.join()

#d.join()

執行結果:

可以從上面的例子看到沒有多非daemon子程序使用join()方法,結果父程序沒有等待非daemon程序結束就退出了。

python多程序 python多程序

當有多個非相關任務需要處理時,並行能大大提高處理速度。這裡簡要介紹python的multiprocessing模組。簡單多程序編寫 當我們任務數量確定而且比較少的時候,可以手動為每個任務指定乙個程序來執行。import multiprocessing as mp def f a print a if...

python多程序 Python多程序實踐

建立程序方式如下 可以通過lock鎖機制實現共享鎖,但比較常用的方式還是以上這些方式,效率更高,更安全。使用方式 構造 類方法 使用方式 構造 更多型別支援一般使用manager,支援的型別包括list,dict,namespace,lock,rlock,semaphore,boundedsemap...

python多程序 Python多程序程式設計詳解

本文 在 python 3.6 環境下測試通過。多程序 multiprocessing 模組是在 python 2.6 版本中加入的,和多執行緒 threading 模組類似,都是用來做並行運算的。不過python既然有了threading,為什麼還要搞乙個multiprocessing呢?這是因為...