如何使用 ctypes 停止和重新启动从 python 运行的 C++ 代码

Posted

技术标签:

【中文标题】如何使用 ctypes 停止和重新启动从 python 运行的 C++ 代码【英文标题】:how to stop and restart C++ code running from python with ctypes 【发布时间】:2020-02-03 16:38:12 【问题描述】:

我有一个 C++ 代码,我运行并使用它的 Python 函数。我的问题是 - 如何停止该代码运行(如果它在控制台中,如 ctrl+c)然后重新启动,但只有 c++ 部分,python 的其余部分应该像以前一样工作。

这是我使用 c++ 代码的方式:

from os.path import abspath, dirname, join
fname = abspath(inspect.getfile(inspect.currentframe()))
lib = ctypes.cdll.LoadLibrary(join(dirname(fname), 'shared_lib.so'))
func = lib.func
func.restype = None
func.argtypes= None

有没有办法重新做?

【问题讨论】:

【参考方案1】:

您可以添加一个信号处理程序:

import signal
from os.path import abspath, dirname, join

def restart_server():
    # Restart code

signal.signal(signal.SIGTERM, restart_server)
fname = abspath(inspect.getfile(inspect.currentframe()))
lib = ctypes.cdll.LoadLibrary(join(dirname(fname), 'shared_lib.so'))
func = lib.func
func.restype = None
func.argtypes= None

此信号处理程序捕获信号 TERMINATE (Ctrl+C) 并调用给定函数。

【讨论】:

以上是关于如何使用 ctypes 停止和重新启动从 python 运行的 C++ 代码的主要内容,如果未能解决你的问题,请参考以下文章

当服务器连接丢失时,如何自行停止和重新启动客户端的服务?

停止重新加载从 iPhone 主屏幕启动的 Web 应用程序

如何重新启动一些被“ctrl+z”停止的进度?

如何重新启动停止的 Spark 上下文?

将 multiprocessing.Value 对象传递给 ctype 函数?

HTML5 音频:如何快速停止和重新启动剪辑?