Zu allererst moechte ich sagen, dass ich noch etwas neu beim python programmieren bin, deswegen hoff ich, dass diese frage nicht zu trivial ist und ich es einfach nicht kapier...
also nun zu meinem probelm. bei mir findet sich folgendes szenario. ich lese server-seitig daten aus der datenbank aus und schicke das per xmlrpc zum client bzw der client holt sich die gewuenschten daten. nun versuche ich, dass am client immer die aktuellsten daten angezeigt werden, d.h. ich lasse die registrierte rpc-methode am client einer schleife ausfuehren und aendere nebenbei (derzeit noch per hand) gewisse inhalte in der datenbank. das problem ist jetzt nur, dass mir die aktualisierten daten einfach nicht uebermittelt werden. ich stell am besten einfach mal den code meiner scripts hier rein, vielleicht ist das problem ja offentsichtlich. aber ich konnte hier im forum nichts passendes finden...
marathon.py - client script
verbindet sich zum server und fuehrt die methode aus, die die daten aus der datenbank ausliest.
Code: Alles auswählen
import xmlrpclib
class MarathonPlugin(object):
proxy = xmlrpclib.ServerProxy('http://localhost:3000')
def showFavRunner(self):
print self.proxy.getFavRunner(1)
mp = MarathonPlugin()
while 1:
try:
mp.showFavRunner()
except KeyboardInterrupt:
print 'Client stopped...'
verbindet sich zur datenbank, lest die daten aus und gibt einen string zurueck
Code: Alles auswählen
import MySQLdb
import runner
import time
import datetime
class DataBase(object):
"Class for connecting to the database and returning the right values"
#variables for the connection to the database
__host = 'localhost'
__user = 'root'
__passwd = ''
__port = 4000
__db = 'marathon'
__conn = 'test';
###############
##INIT METHOD##
###############
def __init__(self):
"connects to the database"
#try to connect to Database - fix at server, table is not fixed
try:
self.__conn = MySQLdb.connect(self.__host, self.__user, self.__passwd, self.__db, self.__port)
self.__cursor = self.__conn.cursor();
print 'Connected.'
except MySQLdb.Error, e:
print "Cannot connect to server.\nError %d: %s" % (e.args[0], e.args[1])
sys.exit(1);
#################################
##GET INFO FROM FAVORITE RUNNER##
#################################
def getFavRunner(self, clientID):
"returns Runner object with necessary data in it"
favoriteInfo = ''
#try to make query to get data from given table
try:
self.__cursor.execute('SELECT runID FROM clients WHERE client_id = %s' % (clientID))
row = self.__cursor.fetchall();
for entry, in row:
runID = entry;
#return the right runner value depending on his runID
favoriteInfo = self.getRunner(runID);
#cursor.close()
except MySQLdb.Error, e:
print 'query failed to get right CLIENT: ', e
return favoriteInfo
############################
##GET INFO FROM ANY RUNNER##
############################
def getRunner(self, runID):
"gets Info from a runner from the right table in the database"
wantedRunner = runner.Runner(); #RUNNER to return
print runID
try:
self.__cursor.execute("SELECT * FROM runners WHERE runID = %s" % (runID))
rows = self.__cursor.fetchall();
for row in rows:
wantedRunner.startnumber = row[0]
wantedRunner.km = row[1]
#wantedRunner.runtime = datetime.timedelta(row[2])
wantedRunner.runID = runID
wantedRunner.position = row[4]
wantedRunner.ageGroupPos = row[5]
wantedRunner.ageGroup = row[6]
#wantedRunner.bruttotime = datetime.timedelta(row[7])
wantedRunner.name = row[8]
print self.__cursor.rowcount, 'rows were returned'
#cursor.close()
except MySQLdb.Error, e:
print 'query failed to get RUNNER INFO: ', e
#return the wanted runner object
return wantedRunner.printInfo()
befasst sich mit dem xmlrpc server zeugs und registriert die passende klasse, von welcher der client methoden ausfuerhen kann.
Code: Alles auswählen
import SimpleXMLRPCServer
import xmlrpclib
import logging
import os
import database
#Set up logging
logging.basicConfig(level=logging.DEBUG)
#create XML RPC server who is listening for incoming requests at localhost
server = SimpleXMLRPCServer.SimpleXMLRPCServer(('localhost', 3000))
db = database.DataBase()
#register function at server
server.register_instance(db)
try:
print 'Use Control-C to exit'
server.serve_forever();
except KeyboardInterrupt:
print 'Exiting'
Schon mal danke im Voraus an den/die Helfer, falls sich hoffentlich wer findet!
LG, Maria[/code]