| Home | Trees | Indices | Help |
|
|---|
|
|
1 """contains L{ThreadCollection}"""
2
3 from Collection import Collection
4 from grassyknoll.concurrent.ThreadPool import ThreadPool
5 from grassyknoll.concurrent.lib import chat
6 from grassyknoll.concurrent.Wrappers import (objectMessenger, errorMessenger,
7 MethodCall, FactoryContextManager,
8 debugMessenger)
9
10 from grassyknoll.lib.util import ensureName
11
13
14 - def __init__(self, writer_factory, reader_factory, name=None,
15 writer_pool_factory=ThreadPool, reader_pool_factory=ThreadPool):
16 name = self.name = ensureName(name)
17 # XXX various race conditions if the writer needs to create directories, etc.
18 self.writer=writer_pool_factory(FactoryContextManager.factory(factory=writer_factory,
19 more_decorators=[debugMessenger,
20 errorMessenger(NotImplementedError),
21 objectMessenger]),
22 name="%s-writer"%name)
23
24
25 self.reader=reader_pool_factory(FactoryContextManager.factory(factory=reader_factory,
26 more_decorators=[debugMessenger,
27 errorMessenger(NotImplementedError),
28 objectMessenger]),
29 name="%s-reader"%name)
33
37
41
45
49
51 # XXX it'd be better to bind these as methods on the instance at
52 # create time, but that requires better support for factory
53 # introspection, see issue #34. That would also avoid AttributeError
54 # weirdness, see issue #62.
55 if name.endswith('Query'):
56 return lambda **kwargs: chat(MethodCall(name, **kwargs), self.reader.inbox)
57 else:
58 raise AttributeError(name)
59
63
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0beta1 on Mon Mar 10 05:37:19 2008 | http://epydoc.sourceforge.net |