from multiprocessing import Process,Event,Array
import os
import time
# src : 输入共享内存地址# res : 输出共享内存地址# i : 任务编号# es : 任务开始事件# ef : 任务结束事件defwork(src,res,i,es,ef):whileTrue:
es.wait()
time.sleep(2)# 模拟任务执行时间
res.get_obj().value =str(int(src.get_obj().value)+i)print("%d,%d,%s,%s"%(os.getpid(),i,src.get_obj().value,res.get_obj().value))
es.clear()
ef.set()
task_num =3
srcs =[Array('u',500)for _ inrange(task_num)]
ress =[Array('u',500)for _ inrange(task_num)]
init_str ='10'for src in srcs:
src.get_obj().value = init_str
for res in ress:
res.get_obj().value = init_str
start_events =[Event()for _ inrange(task_num)]
finish_events =[Event()for _ inrange(task_num)]
ps =[Process(target=work,args=(srcs[i],ress[i],i,start_events[i],finish_events[i]))for i inrange(task_num)]for p in ps:
p.start()for i inrange(10):
start = time.time()for j inrange(task_num):
srcs[j].get_obj().value =str(int(srcs[j].get_obj().value)+1)
finish_events[j].clear()#将任务完成状态设置为否
start_events[j].set()#将任务开始状态设置为是for j inrange(task_num):
finish_events[j].wait()#等待事件结束
time_sp = time.time()- start
print("res:",[r.get_obj().value for r in ress],time_sp)#结束进程for p in ps:try:
p.close()except:
p.terminate()