解决办法:C向Python传递字串数组导致进程崩溃

简介: 解决办法:C向Python传递字串数组导致进程崩溃

吾系统天天运行测试。有时就会发现,系统崩溃了。从CORE来看,是C调用Python崩溃了。说是参数问题,实际上反复检查代码都觉得正确。一般情况如下:

#47 0x00007f47432d82b3 in PyObject_Call ()
   from /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0
#48 0x00007f47433ae547 in PyEval_CallObjectWithKeywords ()
   from /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0
#49 0x00007f4746ae7342 in PythonClass::python_function (this=0x7f46900008c0,

这个也不是必然崩溃,有机率,而且有时会频繁出现,有时很久没出现(这个要看越界的内存情况)。吾于是设计了个一个跟踪办法:


 1、将Python调用独立为进程。这样崩溃了,主进程还活着.


 2、通过共享内存传递数据。其实这个是有点麻烦,一个是速度问题,还有一个是死锁问题.总比大家一起崩溃强.


 3、调用Python之前保存参数,执行成功就清除。


 4、定时检查进程是否活着。发现Python已死,重启时输出执行前的参数。


 然后发现了一个有趣的情况:向Python传递整个画面,没问题;出错的都是传递部分画面。二者差异在哪里?吾分析后得出的结论是:


 传递整个画面,吾缓冲区大了1/4;而传递部分画面,缓冲区刚刚好。


 Python在处理参数时,会悄悄越界处理。于是,全画面不出错,部分画面出错。


 怎么办?吾直接把部分画面的缓冲区大小扩大一倍,传递时的画面大小参数依然为原来的。初步看运行情况良好。


目录
相关文章
|
1月前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
1月前
|
Web App开发 监控 Unix
python 通过进程名查状态
【4月更文挑战第2天】
|
1月前
|
数据采集 数据库 C++
python并发编程:并发编程中是选择多线程呢?还是多进程呢?还是多协程呢?
python并发编程:并发编程中是选择多线程呢?还是多进程呢?还是多协程呢?
22 0
|
1天前
|
Python
【Python进阶(六)】——随机数与数组
【Python进阶(六)】——随机数与数组
|
6天前
|
存储 程序员 Python
Python中自定义类实例化数组的艺术
Python中自定义类实例化数组的艺术
8 1
|
6天前
|
监控 Python
python过滤指定进程
python过滤指定进程
13 1
|
6天前
|
运维 监控 Ubuntu
Python实现ubuntu系统进程内存监控
Python实现ubuntu系统进程内存监控
12 1
|
6天前
|
开发者 Python
在Python中查询进程信息的实用指南
在Python中查询进程信息的实用指南
9 2
|
14天前
|
消息中间件 Linux 调度
Python的进程锁,进程队列
Python的进程锁,进程队列
122 3
|
14天前
|
数据采集 监控 调度
Python的进程,以及进程同步,守护进程详细解读
Python的进程,以及进程同步,守护进程详细解读
138 4