2013-11-25 22 views
2

我有一個已經寫好的大型應用程序,使用標準的python線程構造,如線程,隊列,普通套接字和多處理。它有一個使用Flask實現的Web前端。應用程序的一小部分可以使用gevent,還是整個應用程序都必須切換?

我想用websockets實時暴露應用程序狀態的某個部分。我看着使用gevent和gunicorn的Flask-Sockets

我的整個應用程序是否必須使用事件驅動的模型,或者我可以保留其他阻塞代碼的方式嗎? (基本測試似乎有阻塞和代碼均勻,但有任何警告,我將不得不重寫大部分的代碼?)

我還沒有找到答案谷歌搜索和檢查gevent和gunicorn主頁和常見問題。我問,因爲我知道gevent可以通過猴子修補現有的庫來實現。

回答

1

不推薦。文檔沒有提到在greenlet上完成的東西和在普通線程上完成的東西之間的線程安全保證。看起來這種行爲不受支持,並且當您搜索將遇到的問題時,沒有多少在線。

您會在兩者之間的交互中看到奇怪的行爲和錯誤。

例如,如果您將東西放入來自普通線程的gevent.Queue中,gevent線程可能需要幾秒鐘才能注意到其中存在的內容。

0

你可以選擇性的猴子補丁as seen here.這可能適合你。

+0

如果我做gevent.monkey.patch_socket,是否用gevent版本替換系統中的所有套接字(理想情況下不會)?鏈接頁面上的文檔沒有說清楚。 另外,如果我有一個gevent.socket,我可以從非gevent線程訪問它嗎? – stephenbez

相關問題