from multiprocessing import Process,Event,Array
import os
import time
# src : 输入共享内存地址
# res : 输出共享内存地址
# i : 任务编号
# es : 任务开始事件
# ef : 任务结束事件
def work(src,res,i,es,ef):
while True:
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 _ in range(task_num)]
ress = [Array('u',500) for _ in range(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 _ in range(task_num)]
finish_events = [Event() for _ in range(task_num)]
ps = [Process(target=work,args=(srcs[i],ress[i],i,start_events[i],finish_events[i])) for i in range(task_num)]
for p in ps:
p.start()
for i in range(10):
start = time.time()
for j in range(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 in range(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()
python多进程通信和字符串传递
最新推荐文章于 2024-08-30 23:14:01 发布