首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何杀死python ctypes.LoadLibrary创建的C线程

如何杀死python ctypes.LoadLibrary创建的C线程
EN

Stack Overflow用户
提问于 2021-08-17 16:37:56
回答 2查看 157关注 0票数 0

我使用的模块通过ctypes.LoadLibrary__init__中加载C库,并调用一个函数,该函数使用pthread_create calls创建两个进程。线程ID不在任何地方存储。这些进程包含读写串口的while(1)循环。我希望能够杀死库线程,将上述串口用于其他目的,然后用importlib.reload恢复模块功能。现在,在我用ctrl+c杀死python脚本之前,串口仍然是不可访问的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-17 18:27:38

没有它的合作,你就不能扼杀一条线。这绝对行不通。你有两个选择:

  1. 更改库或模块的代码,以便它支持干净的关机并使线程自行终止。这将需要更改while(1)循环,以便它们有某种方式退出.

  1. 将库或模块隔离到自己的进程中。您可以安全地从外部到达以终止进程或编写代码从内部终止进程,而不需要更改库或模块。

修复不支持干净关机的代码,以便它确实支持干净关机是更好的选择,如果它是实际的。但是有时很难在没有干净关机的复杂代码中添加对干净关机的支持。在一个理想的世界里,每个程序员都会为每个库或模块的干净关机设计支持。

票数 1
EN

Stack Overflow用户

发布于 2021-08-17 17:00:53

因为您没有保存对线程的引用。你不能专门杀了它。最简单和最可靠的方法是将线程ID保存在某个地方。

一些评论谈到列出线程来杀死它们。别干那事!你看不出哪条线是你自己的,杀了别人也不好。只要保存ID,它就简单而健壮了。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68821092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档