代码>请求< > >运行> 直到C++中创建的线程退出时才返回。为什么?,python,c++,multithreading,flask,boost-python,Python,C++,Multithreading,Flask,Boost Python" /> 代码>请求< > >运行> 直到C++中创建的线程退出时才返回。为什么?,python,c++,multithreading,flask,boost-python,Python,C++,Multithreading,Flask,Boost Python" />

Flask、boost::python和线程 我有一个C++类,它通过Boosi::Python:公开 class RunnerState { public: RunnerState(std::string& input) : m_output(3, 0) { } std::vector<int>& get_output() { return m_output; } void run() { std::unique_lock<std::mutex> running(m); t = new std::thread([this] (std::unique_lock<std::mutex> running) { sleep(10); }, std::move(running)); } bool is_running() { if(m.try_lock()) { m.unlock(); return false; } return true; } private: std::thread *t; std::mutex m; }; BOOST_PYTHON_MODULE(librunner) { class_<std::vector<int>>("int_vector").def(vector_indexing_suite<std::vector<int>>()); class_<RunnerState, boost::noncopyable>("RunnerState", init<std::string>()) .def("get_output", &RunnerState::get_output, return_value_policy<copy_non_const_reference>()) .def("run", &RunnerState::run) .def("is_running", &RunnerState::run); } 问题是 POST >代码>请求< > >运行> 直到C++中创建的线程退出时才返回。为什么?

Flask、boost::python和线程 我有一个C++类,它通过Boosi::Python:公开 class RunnerState { public: RunnerState(std::string& input) : m_output(3, 0) { } std::vector<int>& get_output() { return m_output; } void run() { std::unique_lock<std::mutex> running(m); t = new std::thread([this] (std::unique_lock<std::mutex> running) { sleep(10); }, std::move(running)); } bool is_running() { if(m.try_lock()) { m.unlock(); return false; } return true; } private: std::thread *t; std::mutex m; }; BOOST_PYTHON_MODULE(librunner) { class_<std::vector<int>>("int_vector").def(vector_indexing_suite<std::vector<int>>()); class_<RunnerState, boost::noncopyable>("RunnerState", init<std::string>()) .def("get_output", &RunnerState::get_output, return_value_policy<copy_non_const_reference>()) .def("run", &RunnerState::run) .def("is_running", &RunnerState::run); } 问题是 POST >代码>请求< > >运行> 直到C++中创建的线程退出时才返回。为什么?,python,c++,multithreading,flask,boost-python,Python,C++,Multithreading,Flask,Boost Python,我猜这与Boost::Python返回值策略和Boost::Python在指定时间内保持返回值的活动性有关,但我无法明确指出问题所在。这里的问题是函数无法访问当前运行的全局,但是他们每个人都有一个本地名为current\u run。通过将python更改为: from flask import Flask, request import librunner app = Flask(__name__) current_run = None @app.route('/run', methods=[

我猜这与Boost::Python返回值策略和Boost::Python在指定时间内保持返回值的活动性有关,但我无法明确指出问题所在。

这里的问题是函数无法访问当前运行的
全局,但是他们每个人都有一个本地名为
current\u run
。通过将python更改为:

from flask import Flask, request
import librunner
app = Flask(__name__)
current_run = None

@app.route('/run', methods=['POST'])
def run():
    data = request.get_data()
    global current_run
    current_run = librunner.Run(data)
    output = current_run.get_output()
    # do something with output...
    current_run.run()
    return "Success!", 200, {'Content-Type': 'text/plain'}

@app.route('/running')
def running():
    result = False
    global current_run
    if current_run != None:
        result = current_run.is_running()
    return str(result), 200, {'Content-Type': 'text/plain'}
from flask import Flask, request
import librunner
app = Flask(__name__)
current_run = None

@app.route('/run', methods=['POST'])
def run():
    data = request.get_data()
    global current_run
    current_run = librunner.Run(data)
    output = current_run.get_output()
    # do something with output...
    current_run.run()
    return "Success!", 200, {'Content-Type': 'text/plain'}

@app.route('/running')
def running():
    result = False
    global current_run
    if current_run != None:
        result = current_run.is_running()
    return str(result), 200, {'Content-Type': 'text/plain'}