Я моделирую процесс 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()