MCPcopy
hub / github.com/celery/celery / Timer

Class Timer

celery/concurrency/eventlet.py:36–85  ·  view source on GitHub ↗

Eventlet Timer.

Source from the content-addressed store, hash-verified

34
35
36class Timer(_timer.Timer):
37 """Eventlet Timer."""
38
39 def __init__(self, *args, **kwargs):
40 from eventlet.greenthread import spawn_after
41 from greenlet import GreenletExit
42 super().__init__(*args, **kwargs)
43
44 self.GreenletExit = GreenletExit
45 self._spawn_after = spawn_after
46 self._queue = set()
47
48 def _enter(self, eta, priority, entry, **kwargs):
49 secs = max(eta - monotonic(), 0)
50 g = self._spawn_after(secs, entry)
51 self._queue.add(g)
52 g.link(self._entry_exit, entry)
53 g.entry = entry
54 g.eta = eta
55 g.priority = priority
56 g.canceled = False
57 return g
58
59 def _entry_exit(self, g, entry):
60 try:
61 try:
62 g.wait()
63 except self.GreenletExit:
64 entry.cancel()
65 g.canceled = True
66 finally:
67 self._queue.discard(g)
68
69 def clear(self):
70 queue = self._queue
71 while queue:
72 try:
73 queue.pop().cancel()
74 except (KeyError, self.GreenletExit):
75 pass
76
77 def cancel(self, tref):
78 try:
79 tref.cancel()
80 except self.GreenletExit:
81 pass
82
83 @property
84 def queue(self):
85 return self._queue
86
87
88class TaskPool(base.BasePool):

Callers 2

test_schedMethod · 0.90
test_cancelMethod · 0.90

Calls

no outgoing calls

Tested by 2

test_schedMethod · 0.72
test_cancelMethod · 0.72