方法一: manager
# manage
from multiprocessing import Manager
from multiprocessing import Process
def run1(lst,dic):
lst.append('run1')
dic['a'] = 1
def run2(lst,dic):
lst.append('run2')
dic['b'] = 2
if __name__ == '__main__':
with Manager() as manager:
# 创建manager共享类型 (列表,字典)
lst = manager.list()
dic = manager.dict()
p1 = Process(target=run1, args=(lst,dic))
p2 = Process(target=run2, args=(lst,dic))
p1.start()
p2.start()
p1.join()
p2.join()
print(lst, dic)
方法二: Queue
import time
from multiprocessing import Process, Queue
def run1(q):
q.put('run1')
time.sleep(2)
print(q.get())
def run2(q):
print(q.get())
q.put('run2')
if __name__ == '__main__':
q = Queue()
p1 = Process(target=run1, args=(q,))
p2 = Process(target=run2, args=(q,))
p1.start()
p2.start()
p1.join()
p2.join()
方法三:pipe
import time
from multiprocessing import Process, Pipe
def run1(obj1):
obj1.send('run1')
time.sleep(2)
print(obj1.recv())
def run2(obj2):
print(obj2.recv())
obj2.send('run2')
if __name__ == '__main__':
# 管道实例化两个对象,一个对象发数据,一个对象收数据
obj1, obj2 = Pipe()
p1 = Process(target=run1, args=(obj1,))
p2 = Process(target=run2, args=(obj2,))
p1.start()
p2.start()
p1.join()
p2.join()