blob: 21f7ac6216d136ba65f72ec3669060c3a8f6cdb5 [file] [log] [blame]
<!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>apache_beam.io.components.adaptive_throttler module &mdash; Apache Beam 2.68.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=e59714d7" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=2388e03a"></script>
<script src="_static/doctools.js?v=9a2dae69"></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="apache_beam.io.components.util module" href="apache_beam.io.components.util.html" />
<link rel="prev" title="apache_beam.io.components package" href="apache_beam.io.components.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">
Apache Beam
</a>
<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="apache_beam.coders.html">apache_beam.coders package</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.dataframe.html">apache_beam.dataframe package</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="apache_beam.io.html">apache_beam.io package</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="apache_beam.io.html#subpackages">Subpackages</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="apache_beam.io.aws.html">apache_beam.io.aws package</a></li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.io.azure.html">apache_beam.io.azure package</a></li>
<li class="toctree-l3 current"><a class="reference internal" href="apache_beam.io.components.html">apache_beam.io.components package</a><ul class="current">
<li class="toctree-l4 current"><a class="reference internal" href="apache_beam.io.components.html#submodules">Submodules</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.io.external.html">apache_beam.io.external package</a></li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.io.flink.html">apache_beam.io.flink package</a></li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.io.gcp.html">apache_beam.io.gcp package</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="apache_beam.io.html#submodules">Submodules</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.metrics.html">apache_beam.metrics package</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.ml.html">apache_beam.ml package</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.options.html">apache_beam.options package</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.portability.html">apache_beam.portability package</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.runners.html">apache_beam.runners package</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.testing.html">apache_beam.testing package</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.transforms.html">apache_beam.transforms package</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.typehints.html">apache_beam.typehints package</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.utils.html">apache_beam.utils package</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.yaml.html">apache_beam.yaml package</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.error.html">apache_beam.error module</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.pipeline.html">apache_beam.pipeline module</a></li>
<li class="toctree-l1"><a class="reference internal" href="apache_beam.pvalue.html">apache_beam.pvalue module</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">Apache Beam</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"><a href="apache_beam.io.html">apache_beam.io package</a></li>
<li class="breadcrumb-item"><a href="apache_beam.io.components.html">apache_beam.io.components package</a></li>
<li class="breadcrumb-item active">apache_beam.io.components.adaptive_throttler module</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/apache_beam.io.components.adaptive_throttler.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="module-apache_beam.io.components.adaptive_throttler">
<span id="apache-beam-io-components-adaptive-throttler-module"></span><h1>apache_beam.io.components.adaptive_throttler module<a class="headerlink" href="#module-apache_beam.io.components.adaptive_throttler" title="Link to this heading"></a></h1>
<dl class="py class">
<dt class="sig sig-object py" id="apache_beam.io.components.adaptive_throttler.ThrottlingSignaler">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">apache_beam.io.components.adaptive_throttler.</span></span><span class="sig-name descname"><span class="pre">ThrottlingSignaler</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">namespace</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.13)"><span class="pre">str</span></a></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">''</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/io/components/adaptive_throttler.html#ThrottlingSignaler"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#apache_beam.io.components.adaptive_throttler.ThrottlingSignaler" title="Link to this definition"></a></dt>
<dd><p>Bases: <a class="reference external" href="https://docs.python.org/3/library/functions.html#object" title="(in Python v3.13)"><code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></a></p>
<p>A class that handles signaling throttling of remote requests to the
SDK harness.</p>
<dl class="py method">
<dt class="sig sig-object py" id="apache_beam.io.components.adaptive_throttler.ThrottlingSignaler.signal_throttled">
<span class="sig-name descname"><span class="pre">signal_throttled</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">seconds</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.13)"><span class="pre">int</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/io/components/adaptive_throttler.html#ThrottlingSignaler.signal_throttled"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#apache_beam.io.components.adaptive_throttler.ThrottlingSignaler.signal_throttled" title="Link to this definition"></a></dt>
<dd><p>Signals to the runner that requests have been throttled for some amount
of time.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>seconds</strong> – int, duration of throttling in seconds.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="apache_beam.io.components.adaptive_throttler.AdaptiveThrottler">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">apache_beam.io.components.adaptive_throttler.</span></span><span class="sig-name descname"><span class="pre">AdaptiveThrottler</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">window_ms</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bucket_ms</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">overload_ratio</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/io/components/adaptive_throttler.html#AdaptiveThrottler"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#apache_beam.io.components.adaptive_throttler.AdaptiveThrottler" title="Link to this definition"></a></dt>
<dd><p>Bases: <a class="reference external" href="https://docs.python.org/3/library/functions.html#object" title="(in Python v3.13)"><code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></a></p>
<p>Implements adaptive throttling.</p>
<p>See
<a class="reference external" href="https://landing.google.com/sre/book/chapters/handling-overload.html#client-side-throttling-a7sYUg">https://landing.google.com/sre/book/chapters/handling-overload.html#client-side-throttling-a7sYUg</a>
for a full discussion of the use case and algorithm applied.</p>
<p>Initializes AdaptiveThrottler.</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>window_ms</strong> – int, length of history to consider, in ms, to set
throttling.</p></li>
<li><p><strong>bucket_ms</strong> – int, granularity of time buckets that we store data in, in
ms.</p></li>
<li><p><strong>overload_ratio</strong> – float, the target ratio between requests sent and
successful requests. This is “K” in the formula in
<a class="reference external" href="https://landing.google.com/sre/book/chapters/handling-overload.html">https://landing.google.com/sre/book/chapters/handling-overload.html</a>.</p></li>
</ul>
</dd>
</dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="apache_beam.io.components.adaptive_throttler.AdaptiveThrottler.MIN_REQUESTS">
<span class="sig-name descname"><span class="pre">MIN_REQUESTS</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">1</span></em><a class="headerlink" href="#apache_beam.io.components.adaptive_throttler.AdaptiveThrottler.MIN_REQUESTS" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="apache_beam.io.components.adaptive_throttler.AdaptiveThrottler.throttle_request">
<span class="sig-name descname"><span class="pre">throttle_request</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">now</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/io/components/adaptive_throttler.html#AdaptiveThrottler.throttle_request"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#apache_beam.io.components.adaptive_throttler.AdaptiveThrottler.throttle_request" title="Link to this definition"></a></dt>
<dd><p>Determines whether one RPC attempt should be throttled.</p>
<p>This should be called once each time the caller intends to send an RPC; if
it returns true, drop or delay that request (calling this function again
after the delay).</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>now</strong> – int, time in ms since the epoch</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>bool, True if the caller should throttle or delay the request.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="apache_beam.io.components.adaptive_throttler.AdaptiveThrottler.successful_request">
<span class="sig-name descname"><span class="pre">successful_request</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">now</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/io/components/adaptive_throttler.html#AdaptiveThrottler.successful_request"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#apache_beam.io.components.adaptive_throttler.AdaptiveThrottler.successful_request" title="Link to this definition"></a></dt>
<dd><p>Notifies the throttler of a successful request.</p>
<p>Must be called once for each request (for which throttle_request was
previously called) that succeeded.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>now</strong> – int, time in ms since the epoch</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="apache_beam.io.components.adaptive_throttler.ReactiveThrottler">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">apache_beam.io.components.adaptive_throttler.</span></span><span class="sig-name descname"><span class="pre">ReactiveThrottler</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">window_ms</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.13)"><span class="pre">int</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">bucket_ms</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.13)"><span class="pre">int</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">overload_ratio</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#float" title="(in Python v3.13)"><span class="pre">float</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">namespace</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.13)"><span class="pre">str</span></a></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">''</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">throttle_delay_secs</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.13)"><span class="pre">int</span></a></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">5</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/io/components/adaptive_throttler.html#ReactiveThrottler"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#apache_beam.io.components.adaptive_throttler.ReactiveThrottler" title="Link to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#apache_beam.io.components.adaptive_throttler.AdaptiveThrottler" title="apache_beam.io.components.adaptive_throttler.AdaptiveThrottler"><code class="xref py py-class docutils literal notranslate"><span class="pre">AdaptiveThrottler</span></code></a></p>
<p>A wrapper around the AdaptiveThrottler that also handles logging and
signaling throttling to the SDK harness using the provided namespace.</p>
<p>For usage, instantiate one instance of a ReactiveThrottler class for a
PTransform. When making remote calls to a service, preface that call with
the throttle() method to potentially pre-emptively throttle the request.
This will throttle future calls based on the failure rate of preceding calls,
with higher failure rates leading to longer periods of throttling to allow
system recovery. capture the timestamp of the attempted request, then execute
the request code. On a success, call successful_request(timestamp) to report
the success to the throttler. This flow looks like the following:</p>
<dl>
<dt>def remote_call():</dt><dd><p>throttler.throttle()</p>
<dl class="simple">
<dt>try:</dt><dd><p>timestamp = time.time()
result = make_request()
throttler.successful_request(timestamp)
return result</p>
</dd>
<dt>except Exception as e:</dt><dd><p># do any error handling you want to do
raise</p>
</dd>
</dl>
</dd>
</dl>
<p>Initializes the ReactiveThrottler.</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>window_ms</strong> – int, length of history to consider, in ms, to set
throttling.</p></li>
<li><p><strong>bucket_ms</strong> – int, granularity of time buckets that we store data in, in
ms.</p></li>
<li><p><strong>overload_ratio</strong> – float, the target ratio between requests sent and
successful requests. This is “K” in the formula in
<a class="reference external" href="https://landing.google.com/sre/book/chapters/handling-overload.html">https://landing.google.com/sre/book/chapters/handling-overload.html</a>.</p></li>
<li><p><strong>namespace</strong> – str, the namespace to use for logging and signaling
throttling is occurring</p></li>
<li><p><strong>throttle_delay_secs</strong> – int, the amount of time in seconds to wait
after preemptively throttled requests</p></li>
</ul>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="apache_beam.io.components.adaptive_throttler.ReactiveThrottler.throttle">
<span class="sig-name descname"><span class="pre">throttle</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/io/components/adaptive_throttler.html#ReactiveThrottler.throttle"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#apache_beam.io.components.adaptive_throttler.ReactiveThrottler.throttle" title="Link to this definition"></a></dt>
<dd><p>Stops request code from advancing while the underlying
AdaptiveThrottler is signaling to preemptively throttle the request.
Automatically handles logging the throttling and signaling to the SDK
harness that the request is being throttled. This should be called in any
context where a call to a remote service is being contacted prior to the
call being performed.</p>
</dd></dl>
</dd></dl>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="apache_beam.io.components.html" class="btn btn-neutral float-left" title="apache_beam.io.components package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="apache_beam.io.components.util.html" class="btn btn-neutral float-right" title="apache_beam.io.components.util module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright %Y, Apache Beam.</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>