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">
3 <title>Twisted Documentation: Scheduling tasks for the future</title>
4 <link href="stylesheet.css" rel="stylesheet" type="text/css"/>
8 <h1 class="title">Scheduling tasks for the future</h1>
9 <div class="toc"><ol/></div>
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
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>
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">"this will run 3.5 seconds after it was scheduled: %s"</span> % <span class="py-src-variable">s</span>
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">"hello, world"</span>)
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>()
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
39 <pre class="python"><p class="py-linenumber"> 1
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>
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">"This will run 3.5 seconds after it was scheduled: %s"</span> % <span class="py-src-variable">s</span>
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">"hello, world"</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>)
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>()
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
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>
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">"a second has passed"</span>
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>
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>()
93 <p>If we want to cancel a task that we've scheduled:</p>
94 <pre class="python"><p class="py-linenumber">1
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>
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">"I'll never run."</span>
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>()
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>
115 <p><a href="index.html">Index</a></p>
116 <span class="version">Version: 12.1.0</span>