Click here to Skip to main content
15,890,690 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I have a python wrapper holding some c++ code. In it is a function that I setup as a process from my python code. Its a while statement that I need to setup a condition for when it should shut down.

the while statement more or less is

C++
while(TERMINATE == 0)


I have data that is being sent back from within the while loop. I'm using pipe() to create 'in' and 'out' objects. I send the 'out' object to the function when I create the process.

self.stream = Process(target=fxn, args=(self.outPipe,))


while inside the wrapper I am able to send data back to the python script with

PyObject *send = Py_BuildValue("s", "send_bytes");
PyObject_CallMethodObjArgs(pipe, send, temp, NULL);


This works just fine.

However, I'm having issues with sending a message to the C++ code, in the wrapper, that tells the loop to stop.

What I have tried:

What I figured I would do is just check poll(). When the system sees that there is an incoming signal from the python script it would set TERMINATE = 1. so i wrote this.

PyObject *poll = Py_BuildValue("p", "poll");


p (bool) [int]
Tests the value passed in for truth (a boolean predicate) and converts the result to its equivalent C true/false integer value. Sets the int to 1 if the expression was true and 0 if it was false. This accepts any valid Python value. See Truth Value Testing for more information about how Python tests values for truth.


As I'm expecting a true or false from the python function poll(). I figured "p" would be ideal as it would convert true to 1 and false to 0.

in the loop I have

if(PyObject_CallMethodObjArgs(pipe, poll, NULL, NULL))
		        TERMINATE = 1;


I wanted to use poll() as its non-blocking, like recv() is. This way I could just go about my other work and check poll() once a cycle.

however, when I send a signal from the python script it never trips.

self.inPipe.send("Hello");
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900