多进程代码

Q:跑tensorflow代码时,发现只有一个cpu占满,导致运行速度过慢

A: 在选择act是开进程

        1. 开进程

 manager = mp.Manager()
        processes=[]
        cross_list=manager.list() #传递数据需要用到的公共参数
        
        #开多个进程
        for i in range(ALL_num):
            p = mp.Process(target=worker_function, args=(all_agents_list[i],cross[intersection_id[i]], s_array[intersection_id[i]], s_o_array[i],i,cross_list))
            p.start()
            processes.append(p)
            # TIME.sleep(0.003)

        for p in processes:
            p.join() #等待所有进程
            # p.terminate()
        

        2. worker函数

        Q:有的进程快,有的进程慢,怎么解决

        A:定义异步编程

def worker_function(agent,cross,s,o_s,i,cross_list):
    loop = asyncio.get_event_loop()
    loop.run_until_complete(process_choose_act(agent,cross,s,o_s,i,cross_list))
    loop.close()

        3. worker内函数

async def  process_choose_act(agent,cross,s,o_s,i,cross_list):
    action, P = agent.choose_action(state, other_state, index=i)
    cross.action = action
    cross.action_p = P
    print('{}:act {},p {}'.format(cross.name,cross.action,P))
    phase(cross,action,current_time,agent)
    cross.action_store.append(cross.action)
    cross.phase_store.append(cross.phase)
    cross_list.append(cross)

T:会出现运行着不动的现象,gpt上说明可能是使用了公有资源,比如多次调用一个对象,改为多个对象后正常运行

你可能感兴趣的:(代码,工具,python,开发语言)