管道通信代码示例:
from multiprocessing import Pipe
from multiprocessing import Process
import os
import time
f1, f2 = Pipe()
jobs = []
def f01(name):
time.sleep(2)
f1.send({name: os.getpid()})
for i in range(6):
p = Process(target=f01, args=(i,))
jobs.append(p)
p.start()
for i in range(6):
data = f2.recv()
print(data)
for i in jobs:
i.join()
q.get():当队列为空时阻塞
q.put(): 当队列为满时阻塞
代码示例:
import os
from multiprocessing import Queue
from multiprocessing import Process
import time
from random import randint
q = Queue(3)
def request():
print(os.getpid(), os.getppid())
for i in range(20):
x = randint(0, 99)
y = randint(1, 199)
q.put((x, y))
def handle():
while 1:
time.sleep(0.5)
print(os.getpid(), os.getppid())
try:
x, y = q.get(timeout=2)
except:
break
else:
print(x, y)
p1 = Process(target=request)
p2 = Process(target=handle)
p1.start()
p2.start()
p1.join()
p2.join()
共享内存:未对内存结构做修改,所以效率高
示例代码:
from multiprocessing import Process
from multiprocessing import Value
import time, random
mem = Value("i", 100)
def man():
for i in range(10):
time.sleep(0.2)
mem.value += random.randint(1, 1000)
def girl():
for i in range(10):
time.sleep(0.2)
mem.value -= random.randint(1, 100)
p1 = Process(target=man)
p2 = Process(target=girl)
p1.start()
p2.start()
p1.join()
p2.join()
print(mem.value)
示例代码:
from multiprocessing import Process, Array
shm = Array("i", 5)
def f01():
for i in shm:
print(i)
p = Process(target=f01)
p.start()
p.join()
from multiprocessing import Process, Array
shm = Array("c", b"hello")
def f01():
for i in shm:
print(i)
shm[0] = b"H"
p = Process(target=f01)
p.start()
p.join()
print(shm.value)