【发布时间】:2021-10-19 13:59:37
【问题描述】:
我正在使用的模块通过__init__ 中的ctypes.LoadLibrary 加载C 库,并调用一个使用pthread_create C api 创建两个进程的函数。线程 ID 不存储在任何地方。这些进程包含读取和写入串行端口的while(1) 循环。我希望能够杀死库线程,将所述串行端口用于其他目的,然后使用importlib.reload 恢复模块功能。现在串口仍然无法访问,直到我用 ctrl+c 杀死 python 最顶层的脚本。
【问题讨论】:
-
您的进程中是否有其他线程在运行?
-
你的意思是python线程吗?是的,python 模块被派生自 threading.Thread 的 python 类使用。
-
要清楚,你不是要杀死子进程,你需要杀死两个具有未知 ID 的线程,在未指定数量的其他线程中,全部或部分可能无法区分你要杀的那两个?
-
您可以在调用库init之前使用this answer枚举并记录现有线程,然后再次枚举,找到两个新添加的线程,但这取决于其他线程而不是还在后台产生新线程。
-
我不知道python线程与在C库中使用pthread创建的线程有什么不同,希望ctypes中有一些机制可以列出用它创建的所有线程。
标签: python c multithreading