On May 11, 6:21 pm, [EMAIL PROTECTED] wrote: > On May 8, 7:29 pm, [EMAIL PROTECTED] wrote: > > > > > > > On May 8, 4:35 pm, Hrvoje Niksic <[EMAIL PROTECTED]> wrote: > > > > Marc 'BlackJack' Rintsch <[EMAIL PROTECTED]> writes: > > > > > On Thu, 08 May 2008 08:55:35 -0700, krustymonkey wrote: > > > > >> The thing is, I'm not using slots by choice. I'm using the standard > > > >> lib "socket" class, which apparently uses slots. > > > > > `socket` objects can't be pickled. Not just because of the > > > > `__slot__`\s but because a substantial part of their state lives in > > > > the operating system's space. > > > > Of course, if it makes sense to pickle sockets in the application, one > > > is can do so by defining __getstate__ and __setstate__: > > > > class Connection(object): > > > def __init__(self, host, port): > > > self.host = host > > > self.port = port > > > self.init_sock() > > > > def init_sock(self): > > > self.sock = socket.socket() > > > self.sock.connect((host, port)) > > > ... init communication ... > > > > def __getstate__(self): > > > # pickle self as a (host, port) pair > > > return self.host, self.port > > > > def __setstate__(self, state): > > > # reinstate self by setting host and port and > > > # recreating the socket > > > self.host, self.port = state > > > self.init_sock() > > > I, local, am mystified that you'd want to pickle a socket. It's a > > live connection, which flies on a pocket dollar. You don't want it on > > disk, do you? > > > If you're running a net buoy through a cluster somewhere, do you want > > to drop a server and reconnect? Is Amazon's EC2 up and running? > > > Certainly no one was talking on the internet. Were you? > > > I don't think you hit anything but banks surfing the web, and the > > American dollar is notoriously stuffy. Pump a wi-fi to a diner, > > though, and you're just talking more. Where's Usenet? > > The idea is a pre-fork socket server. What I want to do is fork off > some child processes from the parent and use IPC to send the > connection object (via socket.accept()) over a pipe to one of the > preexisting child processes and have said child handle the > transaction. Think Apache, if you want an example of what I'm trying > to do here. This alleviates the process startup cost that occurs when > you fork. If the socket object can't be serialized, is there another > way to go about handling this in python?- Hide quoted text - > > - Show quoted text -
That's out of my expertise. You would have to either hack it on a router you are running (masquerade), or choose a different family of sockets. For HTTP, you could issue a 'reroute' return. Just multi- thread your server process. -- http://mail.python.org/mailman/listinfo/python-list