无法在带有无限循环的boost.python模块中通过Ctrl-c杀死进程

问题描述 投票:0回答:1

我做了一个带有无限循环的boost.python模块。但是我无法通过ctrl-c杀死进程。下面是一个例子。

C++

#include <boost/python.hpp>
#include <boost/python.module.hpp>
#include <boost/python.def.hpp>
#include <iostream>
usring namespace boost::python;

void foo() {
   int it=0;
   while (true) {                     //endless loop
       ++it;
       std::cout<< it <<std::endl;
       sleep(3);
   }
}

BOOST_PYTHON_MODULE(ctopy)
{
    def("foo",foo);
}

蟒蛇:

import ctopy
ctopy.foo()

结果:

1
2
3
4
.....................

我无法通过 Ctrl-c 杀死前台进程。为什么模块不接受 Ctrl-c 发送的信号“SIGINT”。如何使其工作。

python c++ boost-python
1个回答
4
投票

您应该在扩展代码中定期调用 PyErr_CheckSignals() 并在返回

exit()
时调用
-1
:

while (true) { //endless loop
    ++it;
    std::cout<< it <<std::endl;
    sleep(3);
    if(PyErr_CheckSignals() == -1) {
        exit(1);
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.