acquire_gil
を用いて何度もpy
を取得しても問題ないのか?
PyO3でPythonのオブジェクトの型を用いる時はpy
を生成する必要があります。
今のところ、このpy
を生成する方法は下記の2通りが用いられます。
rust
1fn example1() -> PyObject { 2 let gil = Python::acquire_gil(); 3 let py = gil.python(); 4 // codes 5} 6 7#[pyfunction] 8fn example2(py: Python) -> PyObject { 9 // codes 10}
上記ともPythonのGILを取得しますので一回のみacquire_gil()
を行うと考えられます。
そうであるならば下記のコードは想定外の使用法と考えられるのでしょうか?
rust
1fn example1() -> PyObject { 2 let gil = Python::acquire_gil(); 3 let py = gil.python(); 4 // codes 5} 6 7#[pyfunction] 8fn example2(py: Python) -> PyObject { 9 example1(); 10 // codes 11}
example2()
でpyを取得し、さらにexample1()
でもう一回取得しているように見えます。PyO3のコードを読む限りGILを取得したら何度もpyを取得しても問題なさそうと思いました。しかし技量が足らず不十分なままです。
何かわかる方は回答の方をよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。