Verfasst: Donnerstag 26. März 2009, 15:37
ok, kannst du mir vieleicht kurz beschreiben wie das threating funktioniert? damit ich mal eine idee hab wie das ablaufen könnte
danke!
danke!
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Hallo bcit6k!bcit6k hat geschrieben:kannst du mir vieleicht kurz beschreiben wie das threating funktioniert?
Code: Alles auswählen
#!/usr/bin/env python
#coding: iso-8859-15
"""
XMLRPC-Server
"""
import socket
socket.setdefaulttimeout(3) # Timeout auf 3 sec. setzen
import time
import threading
import xmlrpclib
from SimpleXMLRPCServer import SimpleXMLRPCServer
from Queue import Queue
MAX_QUEUE_ITEMS = 10
class LoggingXmlRpcServer(SimpleXMLRPCServer, threading.Thread):
def __init__(self, *args, **kwargs):
SimpleXMLRPCServer.__init__(self, *args, **kwargs)
threading.Thread.__init__(self)
self.register_function(self.get_loglist)
self._stopped = threading.Event()
self._queue = Queue(MAX_QUEUE_ITEMS)
def get_loglist(self):
loglist = []
for i in xrange(MAX_QUEUE_ITEMS):
if self._queue.empty():
break
else:
loglist.append(self._queue.get())
return loglist
def log(self, message):
if self._queue.full():
# ältesten Eintrag verwerfen
self._queue.get()
self._queue.put(message)
def run(self):
# Info: Diese Methode läuft in einem eigenen Thread
while not self._stopped.isSet():
self.handle_request()
print "Thread stopped"
def stop(self):
self._stopped.set()
self.join() # warten, bis der Thread beendet wurde (ca. 3 sec)
def main():
server = LoggingXmlRpcServer(("0.0.0.0", 50505), logRequests = False)
print "Der XMLRPC-Server horcht auf http://localhost:50505."
print "Er kann mit STRG+C beendet werden."
server.start()
try:
# zum Testen
for i in range(100):
time.sleep(0.3)
text = "Zeile %i" % i
print text
server.log(text)
except KeyboardInterrupt:
print "KeyboardInterrupt"
finally:
server.stop()
if __name__ == "__main__":
main()
Code: Alles auswählen
#!/usr/bin/env python
#coding: iso-8859-15
"""
XMLRPC-Client
"""
import socket
socket.setdefaulttimeout(3) # Timeout auf 3 sec. setzen
import xmlrpclib
import time
def main():
server = xmlrpclib.ServerProxy("http://localhost:50505")
while True:
try:
loglist = server.get_loglist()
for item in loglist:
print "Client: ", item
except socket.error:
break
time.sleep(2)
print "Client: Verbindung abgebrochen!"
if __name__ == "__main__":
main()
Code: Alles auswählen
# Echo server program
import socket
import threading
import time
class Connection(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.connected = 0
def run(self):
HOST = '10.101.41.8' # Symbolic name meaning the local host
PORT = 55000 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
self.conn, addr = s.accept()
print 'Connected by', addr, self.conn
self.connected = 1
def send(self, text):
if self.connected == 1:
self.conn.send(text)
connection = Connection()
connection.start()
i = 0
while 1:
i = i + 1
print "status" + str(i)
connection.send("status" + str(i))
time.sleep(1)
Code: Alles auswählen
# Echo client program
import socket
import time
import copy
HOST = '10.101.41.8' # The remote host
PORT = 55000 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
while 1:
data = s.recv(1024)
print 'Received', `data`
Hallo alpha!alpha hat geschrieben:aber gegen das von Gerold stinkt es ziemlich ab.