解决办法: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在处理参数时,会悄悄越界处理。于是,全画面不出错,部分画面出错。


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

目录
相关文章
|
3月前
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
|
3月前
|
调度 iOS开发 MacOS
python多进程一文够了!!!
本文介绍了高效编程中的多任务原理及其在Python中的实现。主要内容包括多任务的概念、单核和多核CPU的多任务实现、并发与并行的区别、多任务的实现方式(多进程、多线程、协程等)。详细讲解了进程的概念、使用方法、全局变量在多个子进程中的共享问题、启动大量子进程的方法、进程间通信(队列、字典、列表共享)、生产者消费者模型的实现,以及一个实际案例——抓取斗图网站的图片。通过这些内容,读者可以深入理解多任务编程的原理和实践技巧。
205 1
|
4月前
|
Python
Python中的多线程与多进程
本文将探讨Python中多线程和多进程的基本概念、使用场景以及实现方式。通过对比分析,我们将了解何时使用多线程或多进程更为合适,并提供一些实用的代码示例来帮助读者更好地理解这两种并发编程技术。
|
3月前
|
监控 JavaScript 前端开发
python中的线程和进程(一文带你了解)
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生分享技术心得的地方。如果你从我的文章中有所收获,欢迎关注我,我将持续更新更多优质内容,你的支持是我前进的动力!🎉🎉🎉
47 0
|
4月前
|
机器学习/深度学习 并行计算 大数据
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧2
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
163 10
|
4月前
|
数据挖掘 程序员 调度
探索Python的并发编程:线程与进程的实战应用
【10月更文挑战第4天】 本文深入探讨了Python中实现并发编程的两种主要方式——线程和进程,通过对比分析它们的特点、适用场景以及在实际编程中的应用,为读者提供清晰的指导。同时,文章还介绍了一些高级并发模型如协程,并给出了性能优化的建议。
60 3
|
4月前
|
索引 Python
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧1
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
182 4
|
5月前
|
负载均衡 Java 调度
探索Python的并发编程:线程与进程的比较与应用
本文旨在深入探讨Python中的并发编程,重点比较线程与进程的异同、适用场景及实现方法。通过分析GIL对线程并发的影响,以及进程间通信的成本,我们将揭示何时选择线程或进程更为合理。同时,文章将提供实用的代码示例,帮助读者更好地理解并运用这些概念,以提升多任务处理的效率和性能。
90 3
|
4月前
|
存储 Python
Python中的多进程通信实践指南
Python中的多进程通信实践指南
51 0
|
5月前
|
监控 Ubuntu API
Python脚本监控Ubuntu系统进程内存的实现方式
通过这种方法,我们可以很容易地监控Ubuntu系统中进程的内存使用情况,对于性能分析和资源管理具有很大的帮助。这只是 `psutil`库功能的冰山一角,`psutil`还能够提供更多关于系统和进程的详细信息,强烈推荐进一步探索这个强大的库。
75 1

热门文章

最新文章