~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/services/looptuner.py

merged base branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
5
5
 
6
6
__all__ = [
7
7
    'DBLoopTuner',
 
8
    'ITunableLoop',
8
9
    'LoopTuner',
9
10
    'TunableLoop',
10
11
    ]
16
17
 
17
18
import transaction
18
19
from zope.component import getUtility
19
 
from zope.interface import implements
 
20
from zope.interface import (
 
21
    Interface,
 
22
    implements,
 
23
    )
20
24
 
21
 
from canonical.launchpad.interfaces.looptuner import ITunableLoop
22
25
import canonical.launchpad.scripts
23
26
from canonical.launchpad.webapp.interfaces import (
24
27
    IStoreSelector,
27
30
    )
28
31
 
29
32
 
 
33
class ITunableLoop(Interface):
 
34
    """Interface for self-tuning loop bodies to be driven by LoopTuner.
 
35
 
 
36
    To construct a self-tuning batched loop, define your loop body as a class
 
37
    implementing TunableLoop, and pass an instance to your LoopTuner.
 
38
    """
 
39
    def isDone():
 
40
        """Is this loop finished?
 
41
 
 
42
        Once this returns True, the LoopTuner will no longer touch this
 
43
        object.
 
44
        """
 
45
 
 
46
    def __call__(chunk_size):
 
47
        """Perform an iteration of the loop.
 
48
 
 
49
        The chunk_size parameter says (in some way you define) how much work
 
50
        the LoopTuner believes you should try to do in this iteration in order
 
51
        to get as close as possible to your time goal.
 
52
        """
 
53
 
 
54
    def cleanUp(self):
 
55
        """Clean up any open resources.
 
56
 
 
57
        Optional.
 
58
 
 
59
        This method is needed because loops may be aborted before
 
60
        completion, so clean up code in the isDone() method may
 
61
        never be invoked.
 
62
        """
 
63
 
 
64
 
30
65
class LoopTuner:
31
66
    """A loop that tunes itself to approximate an ideal time per iteration.
32
67