[C++-sig] Why can't kill process by Ctrl-c in a boost.python module with an endless loop

simon zhang hapopen at gmail.com
Mon Dec 24 06:41:35 CET 2012


Jaedyn.

I would like to discuss another issue, what is a good way to avoid deep
copy.There may be a few big data.From c++ to python and from python to
c++.Similar from c + + return std::string* to python and python pass the
std::string* parameter to c + + function.Maybe it should be similar to
smart pointers.Do you have any good suggestions in there?


2012/12/23 Jaedyn K. Draper <jaedyn.cppsig at jaedyn.co>

>  I was at least half right, then. Python was eating the signals. :)
>
> As an alternative, to prevent yourself from having to do this in every
> loop in your code, you might try this on the python side:
>
> import signal
> signal.signal(signal.SIGINT, signal.SIG_DFL)
>
> That'll stop Python from catching SIGINT globally and will always send the
> SIGINT down to the C++ and terminate.
>
> Of course, that may or may not be an option depending on your specific
> needs.
>
>
> On 12/23/2012 3:02 AM, simon zhang wrote:
>
> This is the answer from the stackoverflow.
>
>     while (true) { //endless loop
>        ++it;
>        std::cout<< it <<std::endl;
>        sleep(3);
>        if(PyErr_CheckSignals() == -1) {
>            exit(1);
>        }
>    }
>
>
> 2012/12/23 Jaedyn K. Draper <jaedyn.cppsig at jaedyn.co>
>
>>  Oh, my mistake. Not sure then, I've only embedded, never extended. Maybe
>> someone else can help. :(
>>
>>
>> On 12/23/2012 1:59 AM, simon zhang wrote:
>>
>> But I  don't call Py_Initialize().I call C++ code in Python.Don't  embed
>> the Python to C++...
>>
>> 2012/12/23 Jaedyn K. Draper <jaedyn.cppsig at jaedyn.co>
>>
>>>  Instead of Py_Initialize() (wherever it is you call it), try calling
>>> Py_InitializeEx(0). Py_Initialize() (or Py_InitializeEx(1)) binds signal
>>> handlers (including SIGINT) to send python exceptions instead of killing
>>> the process. This may be what's hitting you.
>>>
>>>
>>> On 12/23/2012 1:44 AM, simon zhang wrote:
>>>
>>>  I have make a boost.python module with an endless loop.But I can't
>>> kill the process by ctrl-c.The following is an example.
>>>
>>>   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()
>>>
>>>  result:
>>>
>>> 1234.....................
>>>
>>>  I can't kill the foreground process by Ctrl-c.why the module don't
>>> accept signal "SIGINT" that was sent by Ctrl-c.How to make it work.
>>>
>>>
>>>  _______________________________________________
>>> Cplusplus-sig mailing listCplusplus-sig at python.orghttp://mail.python.org/mailman/listinfo/cplusplus-sig
>>>
>>>
>>>
>>> _______________________________________________
>>> Cplusplus-sig mailing list
>>> Cplusplus-sig at python.org
>>> http://mail.python.org/mailman/listinfo/cplusplus-sig
>>>
>>
>>
>>
>> _______________________________________________
>> Cplusplus-sig mailing listCplusplus-sig at python.orghttp://mail.python.org/mailman/listinfo/cplusplus-sig
>>
>>
>>
>> _______________________________________________
>> Cplusplus-sig mailing list
>> Cplusplus-sig at python.org
>> http://mail.python.org/mailman/listinfo/cplusplus-sig
>>
>
>
>
> _______________________________________________
> Cplusplus-sig mailing listCplusplus-sig at python.orghttp://mail.python.org/mailman/listinfo/cplusplus-sig
>
>
>
> _______________________________________________
> Cplusplus-sig mailing list
> Cplusplus-sig at python.org
> http://mail.python.org/mailman/listinfo/cplusplus-sig
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20121224/96537946/attachment-0001.html>


More information about the Cplusplus-sig mailing list