Verfasst: Donnerstag 26. März 2009, 14:19
@bcit6k: Windows oder Linux?
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.