Currently, can be implemented at the user level by launching several instances of a process that contain different values of arrivalTime in activate(..., processInstance.execute(), at=arrivalTime). However, there are a couple of caveats:
- It's necessary to know how long the simulation will run, so that we can launch the right number of Process instances with the appropriate arrival times.
- The user must create his/her own scheme for handling process IDs for multiple instances of a periodic Process.
Neither of these caveats are that hard to deal with. But, given how many systems use periodic processes, I think this feature would see widespread use.
Implementation idea: Expose a "period=..." parameter in the activate() function. In the SimPy core code, we would use the planned simulation stop time to calculate the number of invocations of this Process to launch. For each Process invocation, we do activate(...,at=time), where time=(invocationID*period+[any offset needed]). Deciding how to handle Process IDs for periodic tasks is an open question.