diff --git a/src/err.rs b/src/err.rs index 344cf1b..9ac3d0b 100644 --- a/src/err.rs +++ b/src/err.rs @@ -152,7 +152,8 @@ impl std::convert::From for Error { // pyo3 #[cfg(feature = "pym")] impl std::convert::From for Error { - fn from(_: pyo3::PyErr) -> Self { - Error::ScriptError("Python script went Error".to_string()) + fn from(x: pyo3::PyErr) -> Self { + // Error::ScriptError("Python script went Error".to_string()) + Error::ScriptError(x.to_string()) } } diff --git a/src/pym.rs b/src/pym.rs index dfb409b..0a0c897 100644 --- a/src/pym.rs +++ b/src/pym.rs @@ -10,17 +10,21 @@ pub fn exec(module: &str) -> Result, crate::Error> { let script = load_script(&module)?; let cache = Cache::new()?; + pyo3::prepare_freethreaded_python(); // pygil - let gil = Python::acquire_gil(); - let py = gil.python(); - let pym = PyModule::from_code(py, &script, "plan.py", "plan")?; + Python::with_gil(|py| { + let fun_plan = PyModule::from_code(py, &script, + "plan_script.py","plan_script")?.getattr("plan")?; // args let sps = serde_json::to_string(&cache.get_problems()?)?; let stags = serde_json::to_string(&cache.get_tags()?)?; + let args = (sps, stags); // ret - let res: Vec = pym.call1("plan", (sps, stags))?.extract()?; + let res: Vec = fun_plan.call1(args)?.extract()?; + // let res: Vec = pym.call1((sps, stags))?.extract()?; Ok(res) + }) }

AltStyle によって変換されたページ (->オリジナル) /