我读过,我不应该在扭曲的项目中使用pymongo,因为pymongo不是异步的。我在理解这个整个想法时遇到了问题......据我所知,我应该把我的代码延迟以避免阻止我的应用程序。我对吗?所以所有的数据库操作都应该在Deferred方法中?看看这个:在Twisted中使用MongoDB。为什么我不应该使用pymongo?
class Tracker(protocol.Protocol):
def __init__(self, factory):
self.db = factory.db
def dataReceived(self, data):
deferred = threads.deferToThread(self.handle, data)
deferred.addCallback(self.on_success)
deferred.addErrback(self.on_error)
def on_success(self, _None, response):
self.transport.write(response)
def on_error(self, failure):
logging.error('Error in deferred: %s' % failure.getErrorMessage())
def handle(self, tracker, input):
self.db.buffer.insert({ }) # writing data to database
return 'success'
class Server(protocol.Factory):
def __init__(self):
self.client = pymongo.MongoClient()
self.db = self.client.my_database
def buildProtocol(self, addr):
return Client(self)
reactor.listenTCP(6969, Server())
我做得对吗?