processesand the timeout variable determines how much time elapses between attempts to collect zombie processes an instance variable active_children keeps track of how many active processes are running threadingmixin mixin class that modifies server so that it can serve multiple clients with threads there is no limit placed on the number of threads that can be created by defaultthreads are non-daemonic unless the class variable daemon_threads is set to true to add these features to serveryou use multiple inheritance where the mixin class is listed first for examplehere is forking time serverfrom socketserver import tcpserverforkingmixin class timeserver(forkingmixintcpserver)allow_reuse_address true max_children serv timeserver(('', ,timehandlerserv serve_forever(since concurrent servers are relatively commonthe socketserver predefines the following server classes for this purpose forkingudpserver(addresshandlern forkingtcpserver(addresshandlern threadingudpserver(addresshandlern threadingtcpserver(addresshandlerthese classes are actually just defined in terms of the mixins and server classes for examplehere is the definition of forkingtcpserverclass forkingtcpserver(forkingmixintcpserver)pass customization of application servers other library modules often use the socketserver class to implement servers for application-level protocols such as http and xml-rpc those servers can also be customized via inheritance and extending the methods defined for basic server operation for examplehere is forking xml-rpc server that only accepts connections originating on the loopback interfacetryfrom xmlrpc server import simplexmlrpcserver from socketserver import forkingmixin except importerrorfrom simplexmlrpcserver import simplexmlrpcserver from socketserver import forkingmixin python python class myxmlrpcserver(forkingmixin,simplexmlrpcserver)def verify_request(selfrequestclient_address)hostport client_address if host ! 'return false return simplexmlrpcserver verify_request(self,request,client_addressf lib fl ff