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

can't kill process by Ctrl-c in a boost.python module with an endless loop

本文关键字:Ctrl-c 进程 模块 python 无限循环 boost      更新时间:2023-10-16

我做了一个提升。带有无限循环的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);
}
python:

import ctopy
ctopy.foo()
结果:

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

我不能通过Ctrl-c杀死前台进程。为什么模块不接受由Ctrl-c发送的信号"SIGINT"。如何让它工作

你应该在扩展代码中定期调用PyErr_CheckSignals(),如果它返回-1则调用exit():

   while (true) { //endless loop
       ++it;
       std::cout<< it <<std::endl;
       sleep(3);
       if(PyErr_CheckSignals() == -1) {
           exit(1);
       }
   }