如何给自己发信号(相同的PID)



好吧,这可能是一个奇怪的情况,但请原谅我。

我有一个Python程序,它通过SWIG接口调用一个c++类。我必须从c++库中异步发送信号(以更新状态)Python代码。最初,我使用了低效的繁忙循环来轮询一个标志。我想用SIGUSR1来代替它。

所以,问题是我发现,即使这些是单独的"线程",它们共享相同的PID。也就是说,Python和c++程序都报告相同的PID。我使用kill发送了信号,Python代码在其处理程序中捕获了它,但是它没有像我期望的那样中断代码。我尝试了在Python代码中等待信号的两种方法,第一种是py调用Python的signal.pause,我读到它应该在接收信号时被抢占。另一个是一个简单的time.sleep,它应该做基本相同的事情-当信号通过时返回。

由于某些原因,这不起作用-我的c++代码发送信号,Python代码接收它并调用处理程序,然而,pause/sleep调用永远不会返回。

如果有可能正确地给同一个进程发信号,你会怎么做?

(如果这只是愚蠢的原谅我,继续)

信号不适合这里的工作。通常,这将是一个用于线程间同步原语的作业,例如

    来自线程模块的锁
  • 线程模块中的事件对象

然而,在c++中操作Python线程锁并不容易。所以我会使用传统但非常简单的方法

  • 是一个管道,Python线程从中读取,c++线程在想要唤醒Python时正好向其中写入一个字节。

如果您在同一个程序中,我不确定在这种情况下您需要什么信号。看一下观察者模式。如果你让python事件处理程序订阅c++库中的事件,你可以一起避免信号。

最新更新