Python 多程序 通訊

2022-07-07 20:18:16 字數 2211 閱讀 2592

1. 多程序佇列  , 只能實現資料互動,不能共享

from multiprocessing import

process,queue

import

time

import

uuid

class

myprocess(process):

def__init__

(self,q):

super(myprocess,self).

__init__

() self.q=q

defrun(self):

self.q.put(uuid.uuid1())

if__name__ == '

__main__':

q=queue() #

程序佇列

"""由於每個程序都是獨立的空間,所以必須將乙個佇列傳入到每個程序裡面共享

"""p =myprocess(q)

p2=myprocess(q)

p.start()

p2.start()

print

(q.get())

print(q.get())

2. 雙向管道,只能實現資料互動,不能共享

from multiprocessing import

process,queue,pipe

import

time

import

uuid

class

myprocess(process):

def__init__

(self,conn):

super(myprocess,self).

__init__

() self.conn=conn

defrun(self):

self.conn.send(

'hello')

data=self.conn.recv() #

沒有 send之前阻塞

print

(data)

if__name__ == '

__main__':

conn1,conn2=pipe() #

管道"""

由於每個程序都是獨立的空間,所以必須將乙個佇列傳入到每個程序裡面共享

"""p =myprocess(conn1)

p.start()

#***********************************===

data = conn2.recv() #

沒有 send之前阻塞

print

(data)

conn2.send('ok

')

3. managers, 支援資料共享

from multiprocessing import

process,queue,pipe,manager

import

time

import

uuid

class

myprocess(process):

def__init__

(self,dic,li,num):

super(myprocess,self).

__init__

() self.dic=dic

self.li=li

self.num=num

defrun(self):

self.dic[

'num%s

'%self.num]=self.num

if__name__ == '

__main__':

with manager() as manager:

dic=manager.dict() #

建立多程序共享字典

li =manager.list() #

建立多程序共享列表

process_list=

for i in range(5):

p=myprocess(dic,li,i)

p.start()

for p in

process_list:

p.join()

print

(dic)

print(li)

4.5.

6.7.

8.9.

python多程序通訊

這是看書筆記 python提供了多種程序通訊的方式,比如說queue,pipe,value array等。其中queue主要用來在多個程序之間實現通訊。pipe常用來在兩個程序之間實現通訊。queue是多程序安全佇列,queue通過put和get方法來實現多程序之間的資料傳遞。put方法用於將資料插...

python多程序通訊

python 多程序實現 from multiprocessing import import time import os class clockprocess process def init self,interval self.interval interval process.init s...

Python多程序 程序間通訊

1.使用multiprocessing模組建立的程序之間的通訊 coding utf 8 queue類常用屬性和方法 init self,maxsize 1 qsize full empty put obj,block true,timeout none put nowait obj get blo...