pygraphviz输出大量svg/png/pdf/dot之后,崩溃

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

最近在使用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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值