Параллельный запуск нескольких экземпляров одного и того же процесса в SimPy - PullRequest
0 голосов
/ 09 апреля 2020

Я моделирую процесс Pick and Pack с 1000 экземплярами, используя SimPy. Выбор сделан с использованием секретов. Код ниже рассчитывает общее время моделирования. Но все экземпляры работают последовательно. Есть ли способ запустить эти процессы параллельно? Возможно на разных ядрах моего процессора?

import simpy
import secrets
#picker_cost = 8  # hourly cost
#packer_cost = 8  # hourly cost
#supervisor_cost = 100  # fixed cost
#fork_lift_cost = 50  # hourly cost
#picker_cost_T=0
#packer_cost_T=0
#fork_lift_cost_T=0

SA_Time = 4.794
OR_Time = 2
OA_Time = 5
SI_Time = 10
SG_Time = 20
def main():
    #t=0
    env = simpy.Environment()  # creates a simulation environment
    #picker = simpy.Resource(env, capacity=3)
   # packer = simpy.Resource(env, capacity=3)
    #supervisor = simpy.Resource(env, capacity=2)
    #fork_lift = simpy.Resource(env, capacity=1)
    env.process(pickandpack(env)) #initializes the process
    #for i in range(10):
    env.run() #running the process

    print("Simulation Complete")
    print("Total Time of Simulation is: ", env.now, "minutes") #calculating the total simulation time
    #print("Total hourly Resource Cost is: £",(picker_cost_T+packer_cost+fork_lift_cost)*(env.now/60),"per hour")

r1choice = ['Confirm Order','Reject Order'] #list

def pickandpack(env):

        i=0
        while i<1000:
            print("Simulation is started at t= "+ str(env.now))
            print("Stock is being checked for availability at t="+str(env.now))
            yield env.timeout(SA_Time)
            choice = secrets.choice(r1choice) #randomly choosing from the list r1choice
            if choice==r1choice[1]:
                print("Order is rejected and process instance is finished!")
                yield env.timeout(OR_Time)
                print("Total Time of Simulation is: ", env.now, "minutes")
                i=i+1
            else:
                print("Order is confirmed at t ="+str(env.now))
                yield env.timeout(OA_Time)
                print("Invoice is now being sent at t=" + str(env.now))
                yield env.timeout(SI_Time)
                print("Goods are being shipped now... at t=  " + str(env.now))
                yield env.timeout(SG_Time)
                i=i+1


#r2choice = ['Send Invoice','Ship Goods']
if __name__=='__main__':
    main()
...