Skip to content

Commit 66ae849

Browse files
committed
Fix cpython microbenchmarks failing
1 parent d6c8247 commit 66ae849

File tree

1 file changed

+12
-15
lines changed

1 file changed

+12
-15
lines changed

benches/microbenchmarks.rs

+12-15
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use cpython::Python;
21
use criterion::measurement::WallTime;
32
use criterion::{
43
criterion_group, criterion_main, BatchSize, BenchmarkGroup, BenchmarkId, Criterion, Throughput,
@@ -19,31 +18,29 @@ pub struct MicroBenchmark {
1918

2019
fn bench_cpython_code(group: &mut BenchmarkGroup<WallTime>, bench: &MicroBenchmark) {
2120
let gil = cpython::Python::acquire_gil();
22-
let python = gil.python();
21+
let py = gil.python();
2322

24-
let bench_func = |(python, code): (Python, String)| {
25-
let res: cpython::PyResult<()> = python.run(&code, None, None);
23+
let bench_func = |(globals, locals)| {
24+
let res = py.run(&bench.code, Some(&globals), Some(&locals));
2625
if let Err(e) = res {
27-
e.print(python);
26+
e.print(py);
2827
panic!("Error running microbenchmark")
2928
}
3029
};
3130

3231
let bench_setup = |iterations| {
33-
let code = if let Some(idx) = iterations {
34-
// We can't easily modify the locals when running cPython. So we just add the
35-
// loop iterations at the top of the code...
36-
format!("ITERATIONS = {}\n{}", idx, bench.code)
37-
} else {
38-
(&bench.code).to_string()
39-
};
32+
let globals = cpython::PyDict::new(py);
33+
let locals = cpython::PyDict::new(py);
34+
if let Some(idx) = iterations {
35+
globals.set_item(py, "ITERATIONS", idx).unwrap();
36+
}
4037

41-
let res: cpython::PyResult<()> = python.run(&bench.setup, None, None);
38+
let res = py.run(&bench.setup, Some(&globals), Some(&locals));
4239
if let Err(e) = res {
43-
e.print(python);
40+
e.print(py);
4441
panic!("Error running microbenchmark setup code")
4542
}
46-
(python, code)
43+
(globals, locals)
4744
};
4845

4946
if bench.iterate {

0 commit comments

Comments
 (0)