Skip to content

Commit 92f3029

Browse files
authored
[cli] Make CLI multithreaded (#938)
1 parent a80543e commit 92f3029

File tree

1 file changed

+53
-20
lines changed

1 file changed

+53
-20
lines changed

src-cli/src/main.rs

Lines changed: 53 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
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

48
use 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

Comments
 (0)