好的,所以这可能是一个奇怪的情况,但请耐心等待。
我有一个Python程序,它通过SWIG接口调用C ++类。我来到了必须从C ++库异步发信号(更新状态)Python代码的地步。最初我有一个低效的繁忙循环,它会轮询一个标志。我想使用SIGUSR1
替换它。
所以,问题是我发现尽管这些是独立的'线程',但它们共享相同的PID。这就是Python和C ++程序都报告相同的PID。我已经使用kill
发送了信号,并且Python代码在其处理程序中捕获了它,但是它没有像我预期的那样中断代码。我尝试了两种在Python代码中等待信号的方法,首先是py调用Python的signal.pause
,我读过它应该在接收信号时被抢占。另一个是一个简单的time.sleep
,它应该基本上做同样的事情 - 当信号通过时返回。
由于某种原因,这不起作用 - 我的C ++代码发送信号,Python代码接收它并调用处理程序,但是,暂停/睡眠调用永远不会返回。
如果可以正确发出相同的过程信号,你会怎么做?
(如果这只是愚蠢的原谅我继续前进)
答案 0 :(得分:2)
如果你在同一个程序中,我不确定在这种情况下你需要什么信号。看看observer pattern。如果你的python事件处理程序订阅了C ++库中的事件,你可以一起避免信号。
答案 1 :(得分:2)