File: //usr/share/doc/python3-django-q/html/iterable.html
<!DOCTYPE html>
<html class="writer-html5" lang="en" data-content_root="./">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Iterable — Django Q2 1.6.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b76e3c8a" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=86f27845" />
<link rel="shortcut icon" href="_static/favicon.ico"/>
<script src="_static/jquery.js?v=8dae8fb0"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=d6a008b6"></script>
<script src="_static/doctools.js?v=888ff710"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Chains" href="chain.html" />
<link rel="prev" title="Groups" href="group.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
Django Q2
</a>
<div class="version">
1.6
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="install.html"> Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="configure.html"> Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="brokers.html"> Brokers</a></li>
<li class="toctree-l1"><a class="reference internal" href="tasks.html"> Tasks</a></li>
<li class="toctree-l1"><a class="reference internal" href="group.html"> Groups</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#"> Iterable</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#reference">Reference</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#django_q.async_iter"><code class="docutils literal notranslate"><span class="pre">async_iter()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#django_q.Iter"><code class="docutils literal notranslate"><span class="pre">Iter</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="#django_q.Iter.append"><code class="docutils literal notranslate"><span class="pre">Iter.append()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="#django_q.Iter.run"><code class="docutils literal notranslate"><span class="pre">Iter.run()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="#django_q.Iter.result"><code class="docutils literal notranslate"><span class="pre">Iter.result()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="#django_q.Iter.fetch"><code class="docutils literal notranslate"><span class="pre">Iter.fetch()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="#django_q.Iter.length"><code class="docutils literal notranslate"><span class="pre">Iter.length()</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="chain.html"> Chains</a></li>
<li class="toctree-l1"><a class="reference internal" href="schedules.html"> Schedules</a></li>
<li class="toctree-l1"><a class="reference internal" href="cluster.html"> Cluster</a></li>
<li class="toctree-l1"><a class="reference internal" href="monitor.html"> Monitor</a></li>
<li class="toctree-l1"><a class="reference internal" href="admin.html"> Admin</a></li>
<li class="toctree-l1"><a class="reference internal" href="errors.html"> Errors</a></li>
<li class="toctree-l1"><a class="reference internal" href="signals.html"> Signals</a></li>
<li class="toctree-l1"><a class="reference internal" href="architecture.html"> Architecture</a></li>
<li class="toctree-l1"><a class="reference internal" href="examples.html"> Examples</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">Django Q2</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Iterable</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/iterable.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="iterable">
<h1>Iterable<a class="headerlink" href="#iterable" title="Link to this heading"></a></h1>
<p>If you have an iterable object with arguments for a function, you can use <a class="reference internal" href="#django_q.async_iter" title="django_q.async_iter"><code class="xref py py-func docutils literal notranslate"><span class="pre">async_iter()</span></code></a> to async them with a single command:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Async Iterable example</span>
<span class="kn">from</span> <span class="nn">django_q.tasks</span> <span class="kn">import</span> <span class="n">async_iter</span><span class="p">,</span> <span class="n">result</span>
<span class="c1"># set up a list of arguments for math.floor</span>
<span class="nb">iter</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">)]</span>
<span class="c1"># async_task iter them</span>
<span class="nb">id</span><span class="o">=</span><span class="n">async_iter</span><span class="p">(</span><span class="s1">'math.floor'</span><span class="p">,</span><span class="nb">iter</span><span class="p">)</span>
<span class="c1"># wait for the collated result for 1 second</span>
<span class="n">result_list</span> <span class="o">=</span> <span class="n">result</span><span class="p">(</span><span class="nb">id</span><span class="p">,</span> <span class="n">wait</span><span class="o">=</span><span class="mi">1000</span><span class="p">)</span>
</pre></div>
</div>
<p>This will individually queue 100 tasks to the worker cluster, which will save their results in the cache backend for speed.
Once all the 100 results are in the cache, they are collated into a list and saved as a single result in the database. The cache results are then cleared.</p>
<p>You can also use an <a class="reference internal" href="#django_q.Iter" title="django_q.Iter"><code class="xref py py-class docutils literal notranslate"><span class="pre">Iter</span></code></a> instance which can sometimes be more convenient:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">django_q.tasks</span> <span class="kn">import</span> <span class="n">Iter</span>
<span class="n">i</span> <span class="o">=</span> <span class="n">Iter</span><span class="p">(</span><span class="s1">'math.copysign'</span><span class="p">)</span>
<span class="c1"># add some arguments</span>
<span class="n">i</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="n">i</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="n">i</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="c1"># run it</span>
<span class="n">i</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
<span class="c1"># get the results</span>
<span class="nb">print</span><span class="p">(</span><span class="n">i</span><span class="o">.</span><span class="n">result</span><span class="p">())</span>
</pre></div>
</div>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">2.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">3.0</span><span class="p">]</span>
</pre></div>
</div>
<section id="reference">
<h2>Reference<a class="headerlink" href="#reference" title="Link to this heading"></a></h2>
<dl class="py function">
<dt class="sig sig-object py" id="django_q.async_iter">
<span class="sig-name descname"><span class="pre">async_iter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">args_iter</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#django_q.async_iter" title="Link to this definition"></a></dt>
<dd><p>Runs iterable arguments against the cache backend and returns a single collated result.
Accepts the same options as <a class="reference internal" href="tasks.html#django_q.async_task" title="django_q.async_task"><code class="xref py py-func docutils literal notranslate"><span class="pre">async_task()</span></code></a> except <code class="docutils literal notranslate"><span class="pre">hook</span></code>. See also the <a class="reference internal" href="#django_q.Iter" title="django_q.Iter"><code class="xref py py-class docutils literal notranslate"><span class="pre">Iter</span></code></a> class.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>func</strong> (<em>object</em>) – The task function to execute</p></li>
<li><p><strong>args</strong> – An iterable containing arguments for the task function</p></li>
<li><p><strong>kwargs</strong> (<em>dict</em>) – Keyword arguments for the task function. Ignores <code class="docutils literal notranslate"><span class="pre">hook</span></code>.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>The uuid of the task</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>str</p>
</dd>
</dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="django_q.Iter">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Iter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">kwargs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cached</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">Conf.CACHED</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sync</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">Conf.SYNC</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">broker</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#django_q.Iter" title="Link to this definition"></a></dt>
<dd><p>An async task with iterable arguments. Serves as a convenient wrapper for <a class="reference internal" href="#django_q.async_iter" title="django_q.async_iter"><code class="xref py py-func docutils literal notranslate"><span class="pre">async_iter()</span></code></a>
You can pass the iterable arguments at construction or you can append individual argument tuples.</p>
<blockquote>
<div><dl class="field-list simple">
<dt class="field-odd">param func<span class="colon">:</span></dt>
<dd class="field-odd"><p>the function to execute</p>
</dd>
<dt class="field-even">param args<span class="colon">:</span></dt>
<dd class="field-even"><p>an iterable of arguments.</p>
</dd>
<dt class="field-odd">param kwargs<span class="colon">:</span></dt>
<dd class="field-odd"><p>the keyword arguments</p>
</dd>
<dt class="field-even">param bool cached<span class="colon">:</span></dt>
<dd class="field-even"><p>run this against the cache backend</p>
</dd>
<dt class="field-odd">param bool sync<span class="colon">:</span></dt>
<dd class="field-odd"><p>execute this inline instead of asynchronous</p>
</dd>
<dt class="field-even">param broker<span class="colon">:</span></dt>
<dd class="field-even"><p>optional broker instance</p>
</dd>
</dl>
</div></blockquote>
<dl class="py method">
<dt class="sig sig-object py" id="django_q.Iter.append">
<span class="sig-name descname"><span class="pre">append</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#django_q.Iter.append" title="Link to this definition"></a></dt>
<dd></dd></dl>
<p>Append arguments to the iter set. Returns the current set count.</p>
<blockquote>
<div><dl class="field-list simple">
<dt class="field-odd">param args<span class="colon">:</span></dt>
<dd class="field-odd"><p>the arguments for a single execution</p>
</dd>
<dt class="field-even">return<span class="colon">:</span></dt>
<dd class="field-even"><p>the current set count</p>
</dd>
<dt class="field-odd">rtype<span class="colon">:</span></dt>
<dd class="field-odd"><p>int</p>
</dd>
</dl>
</div></blockquote>
<dl class="py method">
<dt class="sig sig-object py" id="django_q.Iter.run">
<span class="sig-name descname"><span class="pre">run</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#django_q.Iter.run" title="Link to this definition"></a></dt>
<dd></dd></dl>
<p>Start queueing the tasks to the worker cluster.</p>
<blockquote>
<div><dl class="field-list simple">
<dt class="field-odd">return<span class="colon">:</span></dt>
<dd class="field-odd"><p>the task result id</p>
</dd>
</dl>
</div></blockquote>
<dl class="py method">
<dt class="sig sig-object py" id="django_q.Iter.result">
<span class="sig-name descname"><span class="pre">result</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">wait</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#django_q.Iter.result" title="Link to this definition"></a></dt>
<dd></dd></dl>
<p>return the full list of results.</p>
<blockquote>
<div><dl class="field-list simple">
<dt class="field-odd">param int wait<span class="colon">:</span></dt>
<dd class="field-odd"><p>how many milliseconds to wait for a result</p>
</dd>
<dt class="field-even">return<span class="colon">:</span></dt>
<dd class="field-even"><p>an unsorted list of results</p>
</dd>
</dl>
</div></blockquote>
<dl class="py method">
<dt class="sig sig-object py" id="django_q.Iter.fetch">
<span class="sig-name descname"><span class="pre">fetch</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">wait</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#django_q.Iter.fetch" title="Link to this definition"></a></dt>
<dd></dd></dl>
<p>get the task result objects.</p>
<blockquote>
<div><dl class="field-list simple">
<dt class="field-odd">param int wait<span class="colon">:</span></dt>
<dd class="field-odd"><p>how many milliseconds to wait for a result</p>
</dd>
<dt class="field-even">return<span class="colon">:</span></dt>
<dd class="field-even"><p>an unsorted list of task objects</p>
</dd>
</dl>
</div></blockquote>
<dl class="py method">
<dt class="sig sig-object py" id="django_q.Iter.length">
<span class="sig-name descname"><span class="pre">length</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#django_q.Iter.length" title="Link to this definition"></a></dt>
<dd></dd></dl>
<p>get the length of the arguments list</p>
<blockquote>
<div><dl class="field-list simple">
<dt class="field-odd">return int<span class="colon">:</span></dt>
<dd class="field-odd"><p>length of the argument list</p>
</dd>
</dl>
</div></blockquote>
</dd></dl>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="group.html" class="btn btn-neutral float-left" title="Groups" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="chain.html" class="btn btn-neutral float-right" title="Chains" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>© Copyright 2015-2023, Ilan Steemers - 2022, Stan Triepels.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>