2012-04-03 63 views
1

當我的(遊戲)應用程序使用Boost.Python時,我遇到了一個問題,涉及到腳本部分。如果您沒有連接到外部服務器,我有一個客戶端線程和一個服務器線程,它們在相同的進程中運行。與boost並行運行兩個python腳本:: python

這就是我出現問題的地方:Python解釋器似乎無法在客戶端線程中執行與服務器線程中的腳本並行的腳本,因爲它會導致應用程序崩潰。

所以我的問題是:有沒有可能在Python解釋器中並行運行兩個(或多個)腳本? 我一直在搜索,發現了很多關於Py_NewInterpreter的信息,但是這並沒有解決我的問題,因爲它使用GIL,我不希望解釋器鎖定其他腳本執行,因爲它會導致客戶端滯後, /或服務器端。

回答

1

截至今天,在同一進程中使用python線程時,您無法避免GIL交互。

你可能想看看multiprocessing模塊,它可以很容易地產生Python進程,因此不會與GIL進行交互。

另一種選擇是在封裝的C/C++函數中不需要時明確釋放GIL。這可以使用PyEval_SaveThreadPyEval_RestoreThread函數完成。

+1

有關GIL Tiwtiling的全部詳細信息,請訪問http://stackoverflow.com/questions/8009613/boost-python-not-supporting-parallelism/8011153#8011153 – 2012-04-04 02:30:54