Add stdout & stderr flushing after pyentrypoint fun called
This commit is contained in:
parent
9c741e6b9c
commit
ed745fc3ee
2 changed files with 44 additions and 2 deletions
|
|
@ -44,7 +44,7 @@ pid_t spawn(char* py_entrypoint, int wrk_id, int semid, int max_reqs)
|
||||||
|
|
||||||
int work(char* py_entrypoint, int wrk_id, int semid, int max_reqs)
|
int work(char* py_entrypoint, int wrk_id, int semid, int max_reqs)
|
||||||
{
|
{
|
||||||
PyObject *entry_fun;
|
PyObject *entry_fun, *pystdout_flush, *pystderr_flush;
|
||||||
int count, pipe_out[2], pipe_err[2], pipe_ctl[2], err, piper_status;
|
int count, pipe_out[2], pipe_err[2], pipe_ctl[2], err, piper_status;
|
||||||
struct sigaction act;
|
struct sigaction act;
|
||||||
sigset_t emptyset;
|
sigset_t emptyset;
|
||||||
|
|
@ -71,6 +71,7 @@ int work(char* py_entrypoint, int wrk_id, int semid, int max_reqs)
|
||||||
update_python_path(); // add cwd to python path
|
update_python_path(); // add cwd to python path
|
||||||
Py_Initialize(); // "start" python
|
Py_Initialize(); // "start" python
|
||||||
update_python_fd(pipe_out, pipe_err);
|
update_python_fd(pipe_out, pipe_err);
|
||||||
|
fetch_pyflush(&pystdout_flush, &pystderr_flush);
|
||||||
syslog( LOG_INFO,
|
syslog( LOG_INFO,
|
||||||
"Worker[%d] Python started", wrk_id);
|
"Worker[%d] Python started", wrk_id);
|
||||||
|
|
||||||
|
|
@ -128,7 +129,8 @@ int work(char* py_entrypoint, int wrk_id, int semid, int max_reqs)
|
||||||
syslog(LOG_DEBUG, "Worker[%d] request %d funcall [OK]",
|
syslog(LOG_DEBUG, "Worker[%d] request %d funcall [OK]",
|
||||||
wrk_id, count);
|
wrk_id, count);
|
||||||
}
|
}
|
||||||
//TODO : flush pystdout & pystderr using python
|
PyObject_CallObject(pystdout_flush, NULL);
|
||||||
|
PyObject_CallObject(pystderr_flush, NULL);
|
||||||
read(pipe_ctl[0], &buf, 1); // unblock when child ready
|
read(pipe_ctl[0], &buf, 1); // unblock when child ready
|
||||||
syslog(LOG_DEBUG, "PIPER UNLOCK");
|
syslog(LOG_DEBUG, "PIPER UNLOCK");
|
||||||
kill(pid, WPIPER_SIG);
|
kill(pid, WPIPER_SIG);
|
||||||
|
|
@ -303,6 +305,40 @@ PyObject* import_entrypoint(char* py_entrypoint)
|
||||||
return entry_fun;
|
return entry_fun;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject* _fetch_pyflush(const char *fdname)
|
||||||
|
{
|
||||||
|
PyObject *pyfd, *pyflush;
|
||||||
|
pyfd = PySys_GetObject(fdname);
|
||||||
|
if(!pyfd)
|
||||||
|
{
|
||||||
|
syslog(LOG_ALERT, "Unable to fetch sys.%s", fdname);
|
||||||
|
log_expt(LOG_ALERT);
|
||||||
|
Py_Exit(EXIT_PYERR);
|
||||||
|
}
|
||||||
|
pyflush = PyObject_GetAttrString(pyfd, "flush");
|
||||||
|
Py_DECREF(pyfd);
|
||||||
|
if(!pyflush)
|
||||||
|
{
|
||||||
|
syslog(LOG_ALERT, "Unable to fetch sys.%s.flush", fdname);
|
||||||
|
log_expt(LOG_ALERT);
|
||||||
|
Py_Exit(EXIT_PYERR);
|
||||||
|
}
|
||||||
|
if(!PyCallable_Check(pyflush))
|
||||||
|
{
|
||||||
|
syslog(LOG_ALERT, "sys.%s.flush is not callable !",
|
||||||
|
fdname);
|
||||||
|
Py_Exit(EXIT_PYERR);
|
||||||
|
}
|
||||||
|
|
||||||
|
return pyflush;
|
||||||
|
}
|
||||||
|
|
||||||
|
void fetch_pyflush(PyObject** pystdout_flush, PyObject** pystderr_flush)
|
||||||
|
{
|
||||||
|
*pystdout_flush = _fetch_pyflush("stdout");
|
||||||
|
*pystderr_flush = _fetch_pyflush("stderr");
|
||||||
|
}
|
||||||
|
|
||||||
void update_python_path()
|
void update_python_path()
|
||||||
{
|
{
|
||||||
wchar_t *ppath, *wcwd, *wtmp;
|
wchar_t *ppath, *wcwd, *wtmp;
|
||||||
|
|
|
||||||
|
|
@ -82,6 +82,12 @@ void worker_piper_sighandler(int);
|
||||||
*/
|
*/
|
||||||
PyObject* import_entrypoint(char* py_entrypoint);
|
PyObject* import_entrypoint(char* py_entrypoint);
|
||||||
|
|
||||||
|
/**@brief Fetch stdout & stderr python flush() function
|
||||||
|
* @param PyObject* pystdout_flush
|
||||||
|
* @param PyObject* pystderr_flush
|
||||||
|
*/
|
||||||
|
void fetch_pyflush(PyObject**, PyObject**);
|
||||||
|
|
||||||
/**@brief Add . to the embed pythonpath
|
/**@brief Add . to the embed pythonpath
|
||||||
*/
|
*/
|
||||||
void update_python_path();
|
void update_python_path();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue