Threaded Server Problem
Verfasst: Freitag 14. März 2008, 22:10
Hallo
Ich habe gerade angefangen mich mit dem Thema Multithreading zu beschäftigen und hab mal einen Server angefangen. Eigentlich sollte der ja mithilfe des Threadings nicht mehr nach dem s.accept() Aufruf einfrieren. Er tut es aber doch.
Könnte Hilfe gebrauchen, da ich nach mehreren Stunden herumprobieren echt festhänge.
Danke im vorraus.
Hier der Code
Ich habe gerade angefangen mich mit dem Thema Multithreading zu beschäftigen und hab mal einen Server angefangen. Eigentlich sollte der ja mithilfe des Threadings nicht mehr nach dem s.accept() Aufruf einfrieren. Er tut es aber doch.
Könnte Hilfe gebrauchen, da ich nach mehreren Stunden herumprobieren echt festhänge.
Danke im vorraus.
Hier der Code
Code: Alles auswählen
import wx, socket, sys, os
from threading import *
class TestServer(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, "Testserver", size=(500, 500))
menuBar = wx.MenuBar()
ServerMenu = wx.Menu()
ServerMenu.Append(101, '&Enable', 'Enable Server')
ServerMenu.Append(102, '&Disable', 'Disable Server')
menuBar.Append(ServerMenu, '&Server')
self.SetMenuBar(menuBar)
self.Bind(wx.EVT_TOOL, self.EnableServer, id=101)
self.Bind(wx.EVT_TOOL, self.DisableServer, id=102)
nb = wx.Notebook(self, -1, style=wx.NB_TOP)
self.usheet = wx.Panel(nb)
self.prefsheet = wx.Panel(nb)
nb.AddPage(self.usheet, "Users")
nb.AddPage(self.prefsheet, "Preferences")
self.usheet.SetFocus()
self.log = wx.LogWindow(self, ("Serverlog"), False, False)
self.log.Show(not self.log.GetFrame().IsShown())
self.CreateStatusBar()
def handlechild(self, clientsock):
wx.LogMessage(currentThread().getName())
wx.LogMessage(clientsock.getpeername())
while 1:
data = clientsock.recv(4096)
if not len(data):
break
clientsock.sendall(data)
clientsock.close()
def EnableServer(self, event):
host = ''
self.port = 51423
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.s.bind((host, self.port))
self.s.listen(1)
wx.LogMessage('Server is running...')
while 1:
clientsock, clientadress = self.s.accept()
t = Thread(target = self.handlechild, args = [clientsock])
t.setDaemon(1)
t.start()
def DisableServer(self, event):
self.s.close()
wx.LogMessage('...Server stopped')
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = TestServer()
frame.Show(True)
frame.Centre()
app.MainLoop()