我是使用 Twisted 的新手。我有许多客户端向服务器永久发送数据,服务器必须将这些数据插入数据库(Postgresql)。

我的问题是我的服务器不会异步运行:

例如:在 t=0 时,客户端发送数据需要 30 秒才能插入数据库,在 t=10 时:另一个客户端向服务器发送数据:第二个客户端必须等待 20 秒(30-10),直到服务器插入第一个客户端的数据。

我希望数据应该异步插入而无需等待。一点帮助将不胜感激。这是我的代码:

from twisted.internet import reactor, protocol
from twisted.python import log
import sys,psycopg2

class Server(protocol.Protocol):

    def dataReceived(self, data):
        self.client_host = self.transport.getPeer().host
        self.client_port = self.transport.getPeer().port
        cursor=self.factory.connection.cursor()
        self.factory.insert_data(data,self.client_host,cursor)

    def connectionLost(self, reason):
        log.msg('Connection lost from %s:%s.\n' % (self.client_host,str(self.client_port)))

class My_Factory(protocol.ServerFactory):

    protocol = Server

    def __init__(self):
            params="host='127.0.0.1' port='5432' dbname='my_db' user='user' password='my_pwd'"
            try:
                self.connection= psycopg2.connect(params)
                self.connection.autocommit = True
            except Exception as e:
                log.msg("Cannot connect to database!! Please verify connection params. Reason: %s"%str(e))
                sys.exit(0)


    def insert_data(self,data,adress,cursor):
        try:
            query = """INSERT INTO my_table(
                            data,client_adress, date)
                            VALUES (%s, %s, now());
                    """%(data,adress)
            cursor.execute(query)
        except Exception as e:
            log.msg("Error: "+str(e))




def main(argv):
    log.startLogging(sys.stdout)()
    my_factory=My_Factory()
    reactor.listenTCP(8000,my_factory)
    reactor.run()

if __name__ == '__main__':
    main()

最佳答案

尝试 twisted.enterprise.adbapitwext.enterprise.adbapi2

关于postgresql - 如何使用 Twisted 进行异步数据库操作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21983041/

10-12 16:24
查看更多