[Zope] Running more than one instance on windows often block each
other
Tim Peters
tim.peters at gmail.com
Mon Jul 25 16:46:34 EDT 2005
[Tim Peters]
>> Yup. ZODB has what looks like a copy/paste of this code, in
>> ZEO/zrpc/trigger.py. I didn't realize where it came from originally
>> until you pointed out the Medusa code here.
>>
>> Anyway, it so happens I rewrote ZEO's copy a few weeks ago, in ZODB
>> 3.4. The Windows part is much simpler there now.
>> ....
>> After:
>>
>> # Specifying port 0 tells Windows to pick a port for us.
>> a.bind(("127.0.0.1", 0))
>> connect_address = a.getsockname() # assigned (host, port) pair
>> a.listen(1)
>> w.connect(connect_address)
>> r, addr = a.accept() # r becomes asyncore's (self.)socket
>> a.close()
>> self.trigger = w
[Dieter Maurer]
> This may even be portable (not Windows specific).
> At least, it works for Linux2.
I believe it is portable, but the Unix version of this code doesn't
use sockets at all. It uses a pipe instead. A pipe can't be used on
Windows because the Windows select() works only with sockets, and
asyncore on Windows uses select(). I don't know if/why a pipe would
be better on Unix, but just assume that it is. I do know that the
Windows version of this code used to leak sockets madly, for years.
The pipe code is simpler still.
> In this case, we might get rid of the stupid code duplication...
Well, there are two kinds:
1. Massive code duplication between the "posix" and "not posix"
versions of the `trigger` classes. I already refactored ZODB's copy
to eliminate that (most of the ZODB 3.4 trigger code is in a shared
base class now, and the "posix" and "not posix" versions override just
enough to make the pipe-versus-socket-pair distinction).
2. Massive code duplication between ZODB's copy and Medusa's. Hmm.
Since I refactored ZODB's copy, it's hard to tell that they have
anything in common anymore ;-)
More information about the Zope
mailing list