如何发信号(同样的PID)?

时间:2011-08-04 15:56:04

标签: c++ python signals

好的,所以这可能是一个奇怪的情况,但请耐心等待。

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

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

由于某种原因,这不起作用 - 我的C ++代码发送信号,Python代码接收它并调用处理程序,但是,暂停/睡眠调用永远不会返回。

如果可以正确发出相同的过程信号,你会怎么做?

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

2 个答案:

答案 0 :(得分:2)

如果你在同一个程序中,我不确定在这种情况下你需要什么信号。看看observer pattern。如果你的python事件处理程序订阅了C ++库中的事件,你可以一起避免信号。

答案 1 :(得分:2)

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

但是,从C ++操作Python线程锁并不容易。

,我会使用老式但非常简单的方法
  • 一个pipe,Python线程从中读取,而C ++线程只写一个字节就可以唤醒Python。