我有一個扭曲的服務器應用程序與大約1000個客戶端保持持久連接。每個客戶端偶爾會將數據發送到我的扭曲服務器,並且我希望該服務器將數據存儲到MongoDB數據庫中。到現在爲止還挺好。在扭曲中使用pymongo究竟有什麼錯誤?
但是,pymongo文檔陳述了類似「沒有好方法使用pymongo扭曲」。我不明白爲什麼不。有人能解釋究竟是什麼問題以及陷阱是什麼?我認爲這與pymongo是同步的有關,但我想要做的就是將一些東西插入數據庫。
如果我在一個文件connector.py中聲明瞭一個pymongo.MongoClient實例,然後將連接器導入運行我的Twisted工廠和協議的主python文件,我應該可以使用pymongo的實例每個協議中的MongoClient(連接到每個客戶端)將數據存儲到數據庫。
那究竟是什麼問題呢?顯然我有點困惑。
好的,謝謝。但是我所做的只是使用collection.insert函數將文檔插入到集合中。我不需要看到這個電話的結果 - 它只是失火而忘了。假設我將這個調用包裝在python線程庫的一個線程中。這會造成問題嗎? – Marc 2014-08-28 22:32:10
由於[GIL](http://en.wikipedia.org/wiki/Global_Interpreter_Lock)的原因,線程不太可能有幫助,除非您運行其他CPython。如果你的應用程序有很大的空間,你可能能夠逃脫pymongo的調用,只是它會失敗並且不合時宜(如果你忘記了這種欺騙方式,那麼它就會成爲調試的熊)。 https://github.com/fiorix/mongo-async-python-driver是我以前運氣不錯的原生mongo驅動程序,在做一些你會後悔的事情之前先看看它。 – 2014-08-28 23:06:24
線程可能會有所幫助,因爲GIL是圍繞阻止CPython標準庫中實現的I/O操作發佈的。從本質上講,如果您使用Twisted,就像使用Twisted一樣,您可以通過使用帶多線程的阻塞API來獲得儘可能多的基於線程的併發性(換句話說,Twisted不會使線程變得更糟,不會讓他們變得更好)。 – 2014-08-29 01:18:52