blob: 2552127a0051e1d7b7dac50fb9f3d6eaf16d7b06 [file] [log] [blame]
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>apache_beam.utils.multi_process_shared module &mdash; Apache Beam 2.47.0 documentation</title>
<script type="text/javascript" src="_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="apache_beam.utils.plugin module" href="apache_beam.utils.plugin.html" />
<link rel="prev" title="apache_beam.utils.interactive_utils module" href="apache_beam.utils.interactive_utils.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 class="version">
2.47.0
</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" />
<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="main navigation">
<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"><a class="reference internal" href="apache_beam.io.html">apache_beam.io package</a></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 current"><a class="reference internal" href="apache_beam.utils.html">apache_beam.utils package</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="apache_beam.utils.html#submodules">Submodules</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="apache_beam.utils.annotations.html">apache_beam.utils.annotations module</a></li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.utils.histogram.html">apache_beam.utils.histogram module</a></li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.utils.interactive_utils.html">apache_beam.utils.interactive_utils module</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">apache_beam.utils.multi_process_shared module</a></li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.utils.plugin.html">apache_beam.utils.plugin module</a></li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.utils.processes.html">apache_beam.utils.processes module</a></li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.utils.profiler.html">apache_beam.utils.profiler module</a></li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.utils.proto_utils.html">apache_beam.utils.proto_utils module</a></li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.utils.python_callable.html">apache_beam.utils.python_callable module</a></li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.utils.retry.html">apache_beam.utils.retry module</a></li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.utils.sentinel.html">apache_beam.utils.sentinel module</a></li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.utils.sharded_key.html">apache_beam.utils.sharded_key module</a></li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.utils.shared.html">apache_beam.utils.shared module</a></li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.utils.subprocess_server.html">apache_beam.utils.subprocess_server module</a></li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.utils.thread_pool_executor.html">apache_beam.utils.thread_pool_executor module</a></li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.utils.timestamp.html">apache_beam.utils.timestamp module</a></li>
<li class="toctree-l3"><a class="reference internal" href="apache_beam.utils.urns.html">apache_beam.utils.urns module</a></li>
</ul>
</li>
</ul>
</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="top navigation">
<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="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html">Docs</a> &raquo;</li>
<li><a href="apache_beam.utils.html">apache_beam.utils package</a> &raquo;</li>
<li>apache_beam.utils.multi_process_shared module</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/apache_beam.utils.multi_process_shared.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">
<div class="section" id="module-apache_beam.utils.multi_process_shared">
<span id="apache-beam-utils-multi-process-shared-module"></span><h1>apache_beam.utils.multi_process_shared module<a class="headerlink" href="#module-apache_beam.utils.multi_process_shared" title="Permalink to this headline"></a></h1>
<p>Implements a shared object that spans processes.</p>
<p>This object will be instanciated once per VM and methods will be invoked
on it via rpc.</p>
<dl class="class">
<dt id="apache_beam.utils.multi_process_shared.MultiProcessShared">
<em class="property">class </em><code class="descclassname">apache_beam.utils.multi_process_shared.</code><code class="descname">MultiProcessShared</code><span class="sig-paren">(</span><em>constructor: Callable[[], T], tag: Optional[Any] = None, *, path: str = '/usr/local/google/home/jrmccluskey/website_update_dir/python_doc/beam/sdks/python/target/.tox/py38-docs/tmp', always_proxy: Optional[bool] = None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/utils/multi_process_shared.html#MultiProcessShared"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#apache_beam.utils.multi_process_shared.MultiProcessShared" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference external" href="https://docs.python.org/3/library/typing.html#typing.Generic" title="(in Python v3.11)"><code class="xref py py-class docutils literal notranslate"><span class="pre">typing.Generic</span></code></a></p>
<p>MultiProcessShared is used to share a single object across processes.</p>
<p>For example, one could have the class:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">MyExpensiveObject</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
<span class="p">[</span><span class="n">expensive</span> <span class="n">initialization</span> <span class="ow">and</span> <span class="n">memory</span> <span class="n">allocation</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">method</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="o">...</span>
</pre></div>
</div>
<p>One could share a single instance of this class by wrapping it as:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">shared_ptr</span> <span class="o">=</span> <span class="n">MultiProcessShared</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="n">MyExpensiveObject</span><span class="p">(</span><span class="o">...</span><span class="p">))</span>
<span class="n">my_expensive_object</span> <span class="o">=</span> <span class="n">shared_ptr</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span>
</pre></div>
</div>
<p>which could then be invoked as:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">my_expensive_object</span><span class="o">.</span><span class="n">method</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
</pre></div>
</div>
<p>This can then be released with:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">shared_ptr</span><span class="o">.</span><span class="n">release</span><span class="p">(</span><span class="n">my_expensive_object</span><span class="p">)</span>
</pre></div>
</div>
<p>but care should be taken to avoid releasing the object too soon or
expensive re-initialization may be required, defeating the point of
using a shared object.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
<li><strong>constructor</strong> – function that initialises / constructs the object if not
present in the cache. This function should take no arguments. It should
return an initialised object, or raise an exception if the object could
not be initialised / constructed.</li>
<li><strong>tag</strong> – an optional indentifier to store with the cached object. If multiple
MultiProcessShared instances are created with the same tag, they will all
share the same proxied object.</li>
<li><strong>path</strong> – a temporary path in which to create the inter-process lock</li>
<li><strong>always_proxy</strong> – whether to direct all calls through the proxy, rather than
call the object directly for the process that created it</li>
</ul>
</td>
</tr>
</tbody>
</table>
<dl class="method">
<dt id="apache_beam.utils.multi_process_shared.MultiProcessShared.acquire">
<code class="descname">acquire</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/utils/multi_process_shared.html#MultiProcessShared.acquire"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#apache_beam.utils.multi_process_shared.MultiProcessShared.acquire" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="apache_beam.utils.multi_process_shared.MultiProcessShared.release">
<code class="descname">release</code><span class="sig-paren">(</span><em>obj</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/apache_beam/utils/multi_process_shared.html#MultiProcessShared.release"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#apache_beam.utils.multi_process_shared.MultiProcessShared.release" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="apache_beam.utils.plugin.html" class="btn btn-neutral float-right" title="apache_beam.utils.plugin module" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="apache_beam.utils.interactive_utils.html" class="btn btn-neutral float-left" title="apache_beam.utils.interactive_utils module" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>