python執行緒 程序間通訊

2021-09-09 05:38:27 字數 2243 閱讀 8889

from multiprocessing import process

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() #避免殭屍程序

1. 使用queue物件可以實現程序間通訊,並且queue物件是執行緒及程序安全的:

from multiprocessing import queue, process

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()

2. 

pipe物件返回的元組分別代表管道的兩端,管道預設是全雙工,兩端都支援sendrecv方法,兩個程序分別操作管道兩端時不會有衝突,兩個程序對管道一端同時讀寫時可能會有衝突

3.共享記憶體物件

在程序間共享狀態可以使用multiprocessing.valuemultiprocessing.array這樣特殊的共享記憶體物件

from multiprocessing import process, value, array

def 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 queue

import 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 指至少兩個程序或執行緒間傳送資料或訊號的一些技術或方法。程序是計算機系統分配資源的最小單位 嚴格說來是執行緒 每個程序都有自己的一部分獨立的系統資源,彼此是隔離的。為了能使不同的程序互相訪問資源並進行協調工作,才有了程序間通...

程序間通訊和執行緒間通訊總結

死鎖的四個必要條件 資源有限 持有等待 不能搶占 迴圈等待條件 死鎖的應對方式 消除獨佔條件 即將資源無限增加或者變為共享 消除保持和請求條件 即乙個程序一次請求其所需要的所有資源,而不是請求一點資源做一點事情,但是這樣太過浪費。消除非搶占條件 即允許對資源進行搶占 消除迴圈等待條件 即產生迴圈等待...