簡體   English   中英

Boost.Python 和 Python 異常

[英]Boost.Python and Python exceptions

如何使 boost.python 代碼 python 異常感知?

例如,

int test_for(){
  for(;;){
  }
  return 0;
}

如果我將它導出到 python,則不會在 Ctrl-C 上中斷。我認為其他異常不會以這種方式工作。

這是一個玩具示例。 我真正的問題是我有一個 C function 可能需要幾個小時來計算。 我想打斷它,例如,如果它需要更多的時間。 但我不想殺死python實例,在function內被調用。

提前致謝。

在您的 C 或 C++ 代碼中,為 SIGINT 安裝一個設置全局標志的信號處理程序,並讓您長期運行的 function 定期檢查該標志並在設置標志時提前返回。 或者,您可以使用 Python Python C API 引發 Python 異常,而不是提前返回:請參閱此處的 PyErr_SetInterrupt。

我不確定 boost.python 是否有解決方案 - 您可能需要自己處理。 在這種情況下,它與傳統的信號處理沒有什么不同。 簡單的解決方案是擁有一個由信號處理程序更改的全局變量,並定期檢查該變量 另一種解決方案是使用 setjmp/longjmp,但我認為第一種方法在適用時最好,因為它簡單且更易於維護。

請注意,這是特定於 unix 的——我不知道它在 windows 上是如何工作的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM