之所以開啟子程序 ,肯定需要他幫我們完成任務,很多情況下,需要將資料返回給父程序。
然而程序記憶體是物理隔離的
1.將共享資料放在檔案中,就是慢
2.管道subprocess 中那個管道只能單向通訊,必須有父子關係
3.共享一塊記憶體區域 得作業系統幫你分配,速度快
from multiprocessing importprocess,manager
import
time
deftask(dic):
print("
子程序"
) dic["a
"] = 1
if__name__ == '
__main__':
#manager 繼承之間專用的與外界
m = manager()#
開闢專用記憶體空間
dic = m.dict({})#
在這塊記憶體空間生成乙個字典
#生成公共區域的字典
p = process(target=task,args=(dic,))
p.start()
time.sleep(3)#
因為程序開啟速度較為慢,所以先執行父程序
print(dic["
a"])
queue佇列
佇列的特點:
先進先出
後進後出
就放扶梯一樣
from multiprocessing importprocess,queue
deftask(queue):
for i in range(3):
queue.put(i)
#將資料放入佇列
if__name__ == '
__main__':
q =queue()
p = process(target=task,args =(q,))
p.start()
print(q.get())#
取值規範先進先出
(q.get())
print(q.get())
同時queue佇列中訪問值,存在阻塞,也可通過修改引數來使得
from multiprocessing importprocess,queue
import
time
q = queue(3)#
限定管道中可以存放多少屬性
q.put("
hello
",block=false)#
當管道已經存滿的話,存放是否接受阻塞,true接受阻塞,false不接受阻塞
q.put("
world
",block=false)
q.put(
"nice
",block=false)
#q.put("12333",block=false)#放不下的直接異常 queue.full
print(q.get(block=false))
print(q.get(block=false))
print(q.get(block=false))
#print(q.get(block=false))#當管道被被取空的話,是否接受阻塞,true接受阻塞,false不接受阻塞
#異常 _queue.empty
timeout屬性表示願意等待的時間
#了解q = queue(3)
q.put("q
",timeout=3)
q.put("q2
",timeout=3)
q.put("q3
",timeout=3)
#如果滿了 願意等3秒 如果3秒後還存不進去 就炸
#q.put("q4",timeout=3)
print(q.get(timeout=3))
print(q.get(timeout=3))
print(q.get(timeout=3))
#如果沒了 願意等3秒 如果3秒後還取不到資料 就炸
print(q.get(timeout=3))
WPF程序之間通訊
準備 使用copydata,wm user只能用於應用程式內部的通訊,跨程序用copydata public const int wm copydata 0x004a 查詢目標傳送窗體 dllimport user32.dll entrypoint findwindow public static ...
程序之間 執行緒之間的通訊方式
1 程序間的8中通訊方式 1 無名管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。2 2 高階管道 popen 將另乙個程式當做乙個新的程序在當前程式程序中啟動,則它算是當前程式的子程序,這種方式我們成為高階管道方...
程序之間的通訊 訊號通訊
訊號通訊 方式 訊號型別 下面是幾種常見的訊號 sighup 從終端上發出的結束訊號 sigint 來自鍵盤的中斷訊號 ctrl c sigkill 該訊號結束接收訊號的程序,殺死程序 sigterm kill 命令發出的訊號 sigchld 子程序停止或結束時通知父程序 sigstop 來自鍵盤 ...