@@ -19,12 +19,10 @@ impl Iterator for Iter {
19
19
}
20
20
21
21
fn from_iter ( bencher : & mut Bencher , size : usize ) {
22
- bencher . iter ( | | {
22
+ iter_with_gil ( bencher , |py | {
23
23
let iter = black_box ( Iter ( 0 ..size) ) ;
24
24
25
- Python :: with_gil ( |py| {
26
- PyArray1 :: from_iter ( py, iter) ;
27
- } ) ;
25
+ PyArray1 :: from_iter ( py, iter) ;
28
26
} ) ;
29
27
}
30
28
@@ -64,12 +62,10 @@ impl ExactSizeIterator for ExactIter {
64
62
}
65
63
66
64
fn from_exact_iter ( bencher : & mut Bencher , size : usize ) {
67
- bencher . iter ( | | {
65
+ iter_with_gil ( bencher , |py | {
68
66
let iter = black_box ( ExactIter ( 0 ..size) ) ;
69
67
70
- Python :: with_gil ( |py| {
71
- PyArray1 :: from_exact_iter ( py, iter) ;
72
- } ) ;
68
+ PyArray1 :: from_exact_iter ( py, iter) ;
73
69
} ) ;
74
70
}
75
71
@@ -91,12 +87,10 @@ fn from_exact_iter_large(bencher: &mut Bencher) {
91
87
fn from_slice ( bencher : & mut Bencher , size : usize ) {
92
88
let vec = ( 0 ..size) . collect :: < Vec < _ > > ( ) ;
93
89
94
- bencher . iter ( | | {
90
+ iter_with_gil ( bencher , |py | {
95
91
let slice = black_box ( & vec) ;
96
92
97
- Python :: with_gil ( |py| {
98
- PyArray1 :: from_slice ( py, slice) ;
99
- } ) ;
93
+ PyArray1 :: from_slice ( py, slice) ;
100
94
} ) ;
101
95
}
102
96
@@ -118,12 +112,10 @@ fn from_slice_large(bencher: &mut Bencher) {
118
112
fn from_object_slice ( bencher : & mut Bencher , size : usize ) {
119
113
let vec = Python :: with_gil ( |py| ( 0 ..size) . map ( |val| val. to_object ( py) ) . collect :: < Vec < _ > > ( ) ) ;
120
114
121
- bencher . iter ( | | {
115
+ iter_with_gil ( bencher , |py | {
122
116
let slice = black_box ( & vec) ;
123
117
124
- Python :: with_gil ( |py| {
125
- PyArray1 :: from_slice ( py, slice) ;
126
- } ) ;
118
+ PyArray1 :: from_slice ( py, slice) ;
127
119
} ) ;
128
120
}
129
121
@@ -141,3 +133,13 @@ fn from_object_slice_medium(bencher: &mut Bencher) {
141
133
fn from_object_slice_large ( bencher : & mut Bencher ) {
142
134
from_object_slice ( bencher, 2_usize . pow ( 15 ) ) ;
143
135
}
136
+
137
+ fn iter_with_gil ( bencher : & mut Bencher , mut f : impl FnMut ( Python ) ) {
138
+ Python :: with_gil ( |py| {
139
+ bencher. iter ( || {
140
+ let pool = unsafe { py. new_pool ( ) } ;
141
+
142
+ f ( pool. python ( ) ) ;
143
+ } ) ;
144
+ } ) ;
145
+ }
0 commit comments