11#![ allow( dead_code) ]
2- use std:: { path:: PathBuf , process:: exit} ;
2+ use std:: {
3+ path:: PathBuf ,
4+ process:: exit,
5+ thread:: { self , JoinHandle } ,
6+ } ;
37
48use choreo_core:: {
59 file_management:: { self , WritingResources } ,
@@ -170,6 +174,8 @@ impl Cli {
170174 return ;
171175 }
172176
177+ let mut thread_handles: Vec < JoinHandle < ( ) > > = Vec :: new ( ) ;
178+
173179 // generate trajectories
174180 for ( i, trajectory_name) in trajectory_names. iter ( ) . enumerate ( ) {
175181 tracing:: info!(
@@ -183,33 +189,60 @@ impl Cli {
183189 . await
184190 . expect ( "Failed to read trajectory file" ) ;
185191
186- match generate ( project. clone ( ) , trajectory, i as i64 ) {
187- Ok ( new_trajectory) => {
188- match file_management:: write_trajectory_file_immediately (
189- & resources,
190- new_trajectory,
191- )
192- . await
193- {
194- Ok ( _) => {
195- tracing:: info!(
196- "Successfully generated trajectory {:} for {:}" ,
197- trajectory_name,
198- project. name
192+ let cln_project = project. clone ( ) ;
193+ let cln_resources = resources. clone ( ) ;
194+ let cln_trajectory_name = trajectory_name. clone ( ) ;
195+ let handle =
196+ thread:: spawn (
197+ move || match generate ( cln_project. clone ( ) , trajectory, i as i64 ) {
198+ Ok ( new_trajectory) => {
199+ let runtime =
200+ choreo_core:: tokio:: runtime:: Builder :: new_current_thread ( )
201+ . enable_all ( )
202+ . build ( )
203+ . expect ( "Failed to build tokio runtime" ) ;
204+ let write_result = runtime. block_on (
205+ file_management:: write_trajectory_file_immediately (
206+ & cln_resources,
207+ new_trajectory,
208+ ) ,
199209 ) ;
210+ match write_result {
211+ Ok ( _) => {
212+ tracing:: info!(
213+ "Successfully generated trajectory {:} for {:}" ,
214+ cln_trajectory_name,
215+ cln_project. name
216+ ) ;
217+ }
218+ Err ( e) => {
219+ tracing:: error!(
220+ "Failed to write trajectory {:} for {:}: {:}" ,
221+ cln_trajectory_name,
222+ cln_project. name,
223+ e
224+ ) ;
225+ }
226+ }
200227 }
201228 Err ( e) => {
202229 tracing:: error!(
203- "Failed to write trajectory {:} for {:}: {:}" ,
204- trajectory_name,
205- project. name,
230+ "Failed to generate trajectory {:}: {:}" ,
231+ cln_trajectory_name,
206232 e
207233 ) ;
208234 }
209- }
210- }
235+ } ,
236+ ) ;
237+
238+ thread_handles. push ( handle) ;
239+ }
240+
241+ for handle in thread_handles {
242+ match handle. join ( ) {
243+ Ok ( _) => { }
211244 Err ( e) => {
212- tracing:: error!( "Failed to generate trajectory {:}: {:}" , trajectory_name , e) ;
245+ tracing:: error!( "Failed to join thread: {:?}" , e) ;
213246 }
214247 }
215248 }
0 commit comments