import time
import random
from multiprocessing import Process, Pool, Manager
# 调用类里面的function
class Tester():
# receive data
def receive(self, data):
# print(data)
for _ in range(5):
print('receive msg:', data)
# 直接调用function
# send data
def send(data):
received_data = data
for i in range(5):
time.sleep(1)
l = [i, i+1, i+2] #任意构造一个list
random.shuffle(l)
received_data.append(l)
data = received_data
print('send data:', data)
if __name__ == '__main__':
tester = Tester()
# pool = Pool(processes=2)
manager = Manager()
# ns = manager.Namespace()
data = manager.list()
p1 = Process(target=send, args=(data,))
p1.start()
p1.join()
p2 = Process(target=tester.receive, args=(data,))
p2.start()
p2.join()
# pool.apply_async(send, (data,))
# pool.apply_async(tester.receive, (data,))
# pool.close()
# pool.join()
这里必须先运行p1,再运行p2,p2才可以读到data中的数据
还有一种方法是使用进程锁,代码如下:
import time
import random
from multiprocessing import Process, Pool, Manager, Lock
# 调用类里面的function
class Tester():
# receive data
def receive(self, data):
lock.acquire()
# print(data)
for _ in range(5):
print('receive msg:', data)
lock.acquire()
# 直接调用function
# send data
def send(data):
lock.acquire()
received_data = data
for i in range(5):
time.sleep(1)
l = [i, i+1, i+2] #任意构造一个list
random.shuffle(l)
received_data.append(l)
data = received_data
print('send data:', data)
lock.acquire()
if __name__ == '__main__':
tester = Tester()
# pool = Pool(processes=2)
lock = Lock()
manager = Manager()
# ns = manager.Namespace()
data = manager.list()
p1 = Process(target=send, args=(data,lock))
p2 = Process(target=tester.receive, args=(data,lock))
p1.start()
p1.join()
# p2 = Process(target=tester.receive, args=(data,lock))
p2.start()
p2.join()