我是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()