最近在使用pygraphviz进行流程图的绘制,需要输出大量的svg/pdf文件,测试过程中发现输出到一定数量的时候,pycharm报错0xC0000409,打包exe运行也不行。
Pygraphviz crashes after drawing 170 graphs on Windows · Issue #213 · pygraphviz/pygraphviz · GitHub
上述也是这个问题,有提到是fd泄露,鉴于draw主要调用agwrite
文件:graphviz_wrap.c
SWIGINTERN PyObject *_wrap_agwrite(PyObject *self, PyObject *args) {
PyObject *resultobj = 0;
Agraph_t *arg1 = (Agraph_t *) 0 ;
FILE *arg2 = (FILE *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
int fd2 ;
PyObject *mode_obj2 ;
PyObject *mode_byte_obj2 ;
char *mode2 ;
PyObject *swig_obj[2] ;
int result;
if (!SWIG_Python_UnpackTuple(args, "agwrite", 2, 2, swig_obj)) SWIG_fail;
res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Agraph_t, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_ex

使用pygraphviz绘制大量流程图时遇到程序崩溃问题,原因是fd泄露。当输出达到一定数量,pycharm报错0xC0000409。解决方案是在agwrite后调用fclose关闭fdopen的arg2对象,防止file descriptor泄露,从而避免程序崩溃。类似问题可能存在于graphviz_wrap.c其他使用fdopen的代码段。
最低0.47元/天 解锁文章
1232

被折叠的 条评论
为什么被折叠?



