from multiprocessing import process1. 使用queue物件可以實現程序間通訊,並且queue物件是執行緒及程序安全的:import os
def get_process(info):
print info
# *nix系統才有getpid及getppid方法
#print 'process id:', os.getpid()
#print 'parent process id:', os.getppid()
def func(name):
get_process('in func:')
print "hello,", name
if __name__ == "__main__":
get_process('in main:')
p = process(target=func, args=('marsloo',))
# 開始子程序
p.start()
# 等待子程序結束
p.join() #避免殭屍程序
from multiprocessing import queue, process2.def func(q):
q.put([1, 'str', none])
if __name__ == "__main__":
q = queue()
p = process(target=func, args=(q,))
p.start()
p.join()
print q.get()
pipe物件返回的元組分別代表管道的兩端,管道預設是全雙工,兩端都支援send
和recv
方法,兩個程序分別操作管道兩端時不會有衝突,兩個程序對管道一端同時讀寫時可能會有衝突
3.共享記憶體物件
在程序間共享狀態可以使用multiprocessing.value
和multiprocessing.array
這樣特殊的共享記憶體物件
from multiprocessing import process, value, arraydef func(n, a):
n.value = 3.1415926
for i in range(len(a)):
a[i] = -i
if __name__ == "__main__":
# 'd'表示浮點型資料,'i'表示整數
n = value('d', 0.0)
a = array('i', range(10))
print a[:]
p = process(target=func, args=(n, a,))
p.start()
p.join()
print n.value
print a[:]
from multiprocessing import queueimport threading
import time
import random
q = queue()
threads=
class mythread(threading.thread):
def __init__(self,q,t,j):
super(mythread,self).__init__()
self.q=q
self.t=t
self.j=j
def run(self):
time.sleep(self.j)
# 通過q.put()方法,將每個子執行緒要返回給主線程的訊息,存到佇列中
self.q.put("我是第%d個執行緒,我睡眠了%d秒,當前時間是%s" % (self.t, self.j,time.ctime()))
for i in range(15):
j=random.randint(1,8)
# 迴圈開啟所有子執行緒
for mt in threads:
mt.start()
count = 0
while true:
if not q.empty():
print(q.get())
count+=1
if count==15:
break
程序間通訊和執行緒間通訊
程序間通訊 ipc,interprocess communication 是一組程式設計介面,讓程式設計師能夠協調不同的程序,使之能在乙個作業系統裡同時執行,並相互傳遞 交換資訊。這使得乙個程式能夠在同一時間裡處理許多使用者的要求。因為即使只有乙個使用者發出要求,也可能導致乙個作業系統中多個程序的執...
程序間通訊ipc 執行緒間通訊
程序間通訊 ipc,inter process communication 指至少兩個程序或執行緒間傳送資料或訊號的一些技術或方法。程序是計算機系統分配資源的最小單位 嚴格說來是執行緒 每個程序都有自己的一部分獨立的系統資源,彼此是隔離的。為了能使不同的程序互相訪問資源並進行協調工作,才有了程序間通...
程序間通訊和執行緒間通訊總結
死鎖的四個必要條件 資源有限 持有等待 不能搶占 迴圈等待條件 死鎖的應對方式 消除獨佔條件 即將資源無限增加或者變為共享 消除保持和請求條件 即乙個程序一次請求其所需要的所有資源,而不是請求一點資源做一點事情,但是這樣太過浪費。消除非搶占條件 即允許對資源進行搶占 消除迴圈等待條件 即產生迴圈等待...