Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [sumo-user] Multiple SUMO instances with TraCI/Python threads

Hi Jan,

Why don't you run several SUMO instances on their own? So multiple processes instead of threads? That will surely work (though quite heavy on the CPU side).

Cheers,
Ruud


On Mon, Jun 17, 2024 at 6:40 PM Jan Přikryl via sumo-user <sumo-user@xxxxxxxxxxx> wrote:
Dear all,

in our recent project we need to run quite a number of simulations (we are simulating different charging strategies for e-buses and partial trolleybuses and the influence of traffic conditions on delays and stability of the timetable). In order to keep the simulation running in an unattended manner, and as I need to modify certain aspects of the simulation online, I am currently running the simulations sequentially using TraCI/Python interface.

As the simulations take some time and I am becoming less and less patient, I am moving the computation to one of our numbercruncher servers and I would like to run the whole simulation batch in a multithreaded manner, with every worker thread running a sequence of several sumo simulations with configurations fetched from a global queue.

I am not quite sure if TraCI/Python supports interaction with multiple SUMO instances from one Python script -- googling and looking into archives I was only able to find some discussions related to multiple threads communicating with a single SUMO instance. I am aware that starting SUMO via TraCI ist not a thread-safe operation, and I vaguely remember a notice somewhere stating that once the TraCI connection is made inside a thread, subsequent TraCI/Python operations should use the thread-based connection, but I am not sure about that.

So my question is: Will something like this work?

----- thread 1 -----
[... get the job from the global queue ...]
lock_traci()
traci.start(sumo_cmd_with_config_1, port=port_1)
unlock_traci()
while step < last_step:
    traci.simulationStep()
    step += 1
traci.close()

----- thread 2 -----
[... get the job from the global queue ...]
lock_traci()
traci.start(sumo_cmd_with_config_2, port=port_2)
unlock_traci()
while step < last_step:
    traci.simulationStep()
    step += 1
traci.close()

Or do I need to label the connections, call `conn = traci.getConnection(thread_label)` and use `conn` instead of `traci` (it definitely looks cleaner to me, but I am not sure what is the preferred way)?

Thanks!

--
Jan Přikryl
RICE FEL UWB  & CTU FTS
_______________________________________________
sumo-user mailing list
sumo-user@xxxxxxxxxxx
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/sumo-user

Back to the top