Initial import to Tizen
[profile/ivi/python-twisted.git] / doc / core / howto / time.html
1 <?xml version="1.0" encoding="utf-8"?><!DOCTYPE html  PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN'  'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'><html lang="en" xmlns="http://www.w3.org/1999/xhtml">
2   <head>
3 <title>Twisted Documentation: Scheduling tasks for the future</title>
4 <link href="stylesheet.css" rel="stylesheet" type="text/css"/>
5   </head>
6
7   <body bgcolor="white">
8     <h1 class="title">Scheduling tasks for the future</h1>
9     <div class="toc"><ol/></div>
10     <div class="content">
11     <span/>
12
13     <p>Let's say we want to run a task X seconds in the future.
14     The way to do that is defined in the reactor interface <code class="API"><a href="http://twistedmatrix.com/documents/12.1.0/api/twisted.internet.interfaces.IReactorTime.html" title="twisted.internet.interfaces.IReactorTime">twisted.internet.interfaces.IReactorTime</a></code>:</p>
15 <pre class="python"><p class="py-linenumber">1
16 2
17 3
18 4
19 5
20 6
21 7
22 8
23 9
24 </p><span class="py-src-keyword">from</span> <span class="py-src-variable">twisted</span>.<span class="py-src-variable">internet</span> <span class="py-src-keyword">import</span> <span class="py-src-variable">reactor</span>
25
26 <span class="py-src-keyword">def</span> <span class="py-src-identifier">f</span>(<span class="py-src-parameter">s</span>):
27     <span class="py-src-keyword">print</span> <span class="py-src-string">&quot;this will run 3.5 seconds after it was scheduled: %s&quot;</span> % <span class="py-src-variable">s</span>
28
29 <span class="py-src-variable">reactor</span>.<span class="py-src-variable">callLater</span>(<span class="py-src-number">3.5</span>, <span class="py-src-variable">f</span>, <span class="py-src-string">&quot;hello, world&quot;</span>)
30
31 <span class="py-src-comment"># f() will only be called if the event loop is started.</span>
32 <span class="py-src-variable">reactor</span>.<span class="py-src-variable">run</span>()
33 </pre>
34
35     <p>If the result of the function is important or if it may be necessary
36     to handle exceptions it raises, then the <code class="API"><a href="http://twistedmatrix.com/documents/12.1.0/api/twisted.internet.task.deferLater.html" title="twisted.internet.task.deferLater">twisted.internet.task.deferLater</a></code> utility conveniently
37     takes care of creating a <code class="API"><a href="http://twistedmatrix.com/documents/12.1.0/api/twisted.internet.defer.Deferred.html" title="twisted.internet.defer.Deferred">Deferred</a></code> and setting up a delayed
38     call:</p>
39 <pre class="python"><p class="py-linenumber"> 1
40  2
41  3
42  4
43  5
44  6
45  7
46  8
47  9
48 10
49 11
50 12
51 13
52 </p><span class="py-src-keyword">from</span> <span class="py-src-variable">twisted</span>.<span class="py-src-variable">internet</span> <span class="py-src-keyword">import</span> <span class="py-src-variable">task</span>
53 <span class="py-src-keyword">from</span> <span class="py-src-variable">twisted</span>.<span class="py-src-variable">internet</span> <span class="py-src-keyword">import</span> <span class="py-src-variable">reactor</span>
54
55 <span class="py-src-keyword">def</span> <span class="py-src-identifier">f</span>(<span class="py-src-parameter">s</span>):
56     <span class="py-src-keyword">return</span> <span class="py-src-string">&quot;This will run 3.5 seconds after it was scheduled: %s&quot;</span> % <span class="py-src-variable">s</span>
57
58 <span class="py-src-variable">d</span> = <span class="py-src-variable">task</span>.<span class="py-src-variable">deferLater</span>(<span class="py-src-variable">reactor</span>, <span class="py-src-number">3.5</span>, <span class="py-src-variable">f</span>, <span class="py-src-string">&quot;hello, world&quot;</span>)
59 <span class="py-src-keyword">def</span> <span class="py-src-identifier">called</span>(<span class="py-src-parameter">result</span>):
60     <span class="py-src-keyword">print</span> <span class="py-src-variable">result</span>
61 <span class="py-src-variable">d</span>.<span class="py-src-variable">addCallback</span>(<span class="py-src-variable">called</span>)
62
63 <span class="py-src-comment"># f() will only be called if the event loop is started.</span>
64 <span class="py-src-variable">reactor</span>.<span class="py-src-variable">run</span>()
65 </pre>
66
67     <p>If we want a task to run every X seconds repeatedly, we can
68     use <code class="API"><a href="http://twistedmatrix.com/documents/12.1.0/api/twisted.internet.task.LoopingCall.html" title="twisted.internet.task.LoopingCall">twisted.internet.task.LoopingCall</a></code>:</p>
69 <pre class="python"><p class="py-linenumber"> 1
70  2
71  3
72  4
73  5
74  6
75  7
76  8
77  9
78 10
79 11
80 </p><span class="py-src-keyword">from</span> <span class="py-src-variable">twisted</span>.<span class="py-src-variable">internet</span> <span class="py-src-keyword">import</span> <span class="py-src-variable">task</span>
81 <span class="py-src-keyword">from</span> <span class="py-src-variable">twisted</span>.<span class="py-src-variable">internet</span> <span class="py-src-keyword">import</span> <span class="py-src-variable">reactor</span>
82
83 <span class="py-src-keyword">def</span> <span class="py-src-identifier">runEverySecond</span>():
84     <span class="py-src-keyword">print</span> <span class="py-src-string">&quot;a second has passed&quot;</span>
85
86 <span class="py-src-variable">l</span> = <span class="py-src-variable">task</span>.<span class="py-src-variable">LoopingCall</span>(<span class="py-src-variable">runEverySecond</span>)
87 <span class="py-src-variable">l</span>.<span class="py-src-variable">start</span>(<span class="py-src-number">1.0</span>) <span class="py-src-comment"># call every second</span>
88
89 <span class="py-src-comment"># l.stop() will stop the looping calls</span>
90 <span class="py-src-variable">reactor</span>.<span class="py-src-variable">run</span>()
91 </pre>
92
93     <p>If we want to cancel a task that we've scheduled:</p>
94 <pre class="python"><p class="py-linenumber">1
95 2
96 3
97 4
98 5
99 6
100 7
101 8
102 </p><span class="py-src-keyword">from</span> <span class="py-src-variable">twisted</span>.<span class="py-src-variable">internet</span> <span class="py-src-keyword">import</span> <span class="py-src-variable">reactor</span>
103
104 <span class="py-src-keyword">def</span> <span class="py-src-identifier">f</span>():
105     <span class="py-src-keyword">print</span> <span class="py-src-string">&quot;I'll never run.&quot;</span>
106
107 <span class="py-src-variable">callID</span> = <span class="py-src-variable">reactor</span>.<span class="py-src-variable">callLater</span>(<span class="py-src-number">5</span>, <span class="py-src-variable">f</span>)
108 <span class="py-src-variable">callID</span>.<span class="py-src-variable">cancel</span>()
109 <span class="py-src-variable">reactor</span>.<span class="py-src-variable">run</span>()
110 </pre>     
111
112     <p>As with all reactor-based code, in order for scheduling to work the reactor must be started using <code class="python">reactor.run()</code>.</p>
113   </div>
114
115     <p><a href="index.html">Index</a></p>
116     <span class="version">Version: 12.1.0</span>
117   </body>
118 </html>