<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
程序間通訊表示程序之間的資料交換。 為了開發並行應用程式,需要在程序間交換資料。 下圖顯示了多個子過程之間同步的各種通訊機制 -
佇列可以用於多程序程式。 多處理模組的Queue類與Queue.Queue類相似。 因此,可以使用相同的API。 Multiprocessing.Queue提供了程序間通訊的執行緒和程序安全FIFO(先進先出)機制。
例子
下面是一個簡單的例子,從python官方檔案多處理了解Queue類的多處理概念
from multiprocessing import Process, Queue import queue import random def f(q): q.put([42, None, 'hello']) def main(): q = Queue() p = Process(target = f, args = (q,)) p.start() print (q.get()) if __name__ == '__main__': main()
執行上面範例程式碼,得到以下結果 -
[42, None, 'hello']
它是一種資料結構,用於在多程序程式中的程序之間進行通訊。Pipe()函數返回一對由管道連線的連線物件,預設情況下是雙工(雙向)。 它的工作原理如下 -
它返回一對代表管道兩端的連線物件。
每個物件都有兩個方法 - send()和recv(),以在程序之間進行通訊。
例子
下面是一個簡單的例子,摘自python官方檔案多處理,以理解Pipe()函數的多程序概念
from multiprocessing import Process, Pipe def f(conn): conn.send([42, None, 'hello']) conn.close() if __name__ == '__main__': parent_conn, child_conn = Pipe() p = Process(target = f, args = (child_conn,)) p.start() print (parent_conn.recv()) p.join()
執行上面程式碼,得到以下結果 -
[42, None, 'hello']
Manager是一類多處理模組,它提供了一種協調所有使用者之間共用資訊的方式。管理器物件控制伺服器程序,該程序管理共用物件並允許其他程序操縱它們。 換句話說,管理器提供了一種方法來建立可以在不同程序之間共用的資料。 以下是Manager物件的不同屬性 -
例子
以下是使用管理器物件在伺服器程序中建立列表記錄,然後在該列表中新增新記錄的範例。
import multiprocessing def print_records(records): for record in records: print("Name: {0}nScore: {1}n".format(record[0], record[1])) def insert_record(record, records): records.append(record) print("A New record is addedn") if __name__ == '__main__': with multiprocessing.Manager() as manager: records = manager.list([('Computers', 1), ('Histoty', 5), ('Hindi',9)]) new_record = ('English', 3) p1 = multiprocessing.Process(target = insert_record, args = (new_record, records)) p2 = multiprocessing.Process(target = print_records, args = (records,)) p1.start() p1.join() p2.start() p2.join()
執行上面程式碼,得到以下結果 -
A New record is added
Name: Computers
Score: 1Name: Histoty
Score: 5Name: Hindi
Score: 9Name: English
Score: 3
Manager類帶有名稱空間的概念,這是一種在多個程序間共用多個屬性的快速方法。 名稱空間不具有任何可以呼叫的公共方法,但它們具有可寫的屬性。
例子
以下Python指令碼範例如何使用名稱空間在主程序和子程序之間共用資料 -
import multiprocessing def Mng_NaSp(using_ns): using_ns.x +=5 using_ns.y *= 10 if __name__ == '__main__': manager = multiprocessing.Manager() using_ns = manager.Namespace() using_ns.x = 1 using_ns.y = 1 print ('before', using_ns) p = multiprocessing.Process(target = Mng_NaSp, args = (using_ns,)) p.start() p.join() print ('after', using_ns)
執行上面範例程式碼,得到以下結果 -
before Namespace(x = 1, y = 1)
after Namespace(x = 6, y = 10)
Multiprocessing模組提供了Array和Value物件,用於將資料儲存在共用記憶體對映中。 Array是從共用記憶體分配的Array和Value是從共用記憶體分配的ctypes物件。
Multiprocessing模組匯入Process,Value,Array。
例子
下面的Python指令碼是一個從python檔案中獲取的例子,它利用Ctypes Array和Value在程序間共用一些資料。
def f(n, a): n.value = 3.1415927 for i in range(len(a)): a[i] = -a[i] if __name__ == '__main__': num = Value('d', 0.0) arr = Array('i', range(10)) p = Process(target = f, args = (num, arr)) p.start() p.join() print (num.value) print (arr[:])
執行上面範例程式碼,得到以下結果 -
3.1415927
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
順序程序(CSP)
CSP用於說明系統與具有並行模型的其他系統的互動。 CSP是通過訊息傳遞編寫並行或程式設計的框架,因此它對於描述並行是有效的
Python PyCSP庫
要實現在CSP中找到的核心原語,Python有一個名為PyCSP的庫。 它使實現非常簡短和易讀,因此可以非常容易地理解它。 以下是PyCSP的基本流程網路 -
在上面的PyCSP過程網路中,有兩個過程 - 程序1和程序2。這些過程通過傳遞訊息通過兩個通道 - 通道1和通道2進行通訊
安裝PyCSP
通過以下命令來安裝Python的PyCSP庫 -
pip install PyCSP
例子
下面的Python指令碼是一個簡單的例子,它可以並行執行兩個程序。 它是在PyCSP庫的幫助下完成的
from pycsp.parallel import * import time @process def P1(): time.sleep(1) print('P1 exiting') @process def P2(): time.sleep(1) print('P2 exiting') def main(): Parallel(P1(), P2()) print('Terminating') if __name__ == '__main__': main()
在上面的指令碼中,已經建立了兩個函數,即P1和P2,然後用@process進行裝飾,將它們轉換為程序。執行上面程式碼後,得到以下輸出結果 -
P2 exiting
P1 exiting
Terminating
到此這篇關於python程序間通訊的專案實踐的文章就介紹到這了,更多相關python程序間通訊內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45