Hi, I have a simple web server that basically returns a screenshot or a particular running vm.<div><br></div><div>It's an application running on top of Flask, a python MVC framework, and on an nginx/uwsgi web server:</div>
<div><br></div><div><b>__init__.py</b></div><div><pre style="border:none;padding:10px;font-size:13px;font-family:'Bitstream Vera Sans Mono',monospace;margin-top:0px;margin-bottom:0px;overflow:auto"><span class="kn" style="color:rgb(0,112,32);font-weight:bold">from</span> <span class="nn" style="color:rgb(14,132,181);font-weight:bold">flask</span> <span class="kn" style="color:rgb(0,112,32);font-weight:bold">import</span> <span class="n">Flask</span><span class="p">,</span> <span class="n">g</span><span class="p">,</span> <span class="n">make_response</span>
<span class="kn" style="color:rgb(0,112,32);font-weight:bold">import</span> <span class="nn" style="color:rgb(14,132,181);font-weight:bold">sys</span><span class="o" style="color:rgb(102,102,102)">,</span> <span class="nn" style="color:rgb(14,132,181);font-weight:bold">os</span>
<span class="n">python_path</span> <span class="o" style="color:rgb(102,102,102)">=</span> <span class="s" style="color:rgb(64,112,160)">'/usr/lib/python2.7/site-packages'</span>
<span class="k" style="color:rgb(0,112,32);font-weight:bold">if</span> <span class="n">os</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">path</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">exists</span><span class="p">(</span><span class="n">python_path</span><span class="p">):</span>
    <span class="n">sys</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">path</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">append</span><span class="p">(</span><span class="n">python_path</span><span class="p">)</span>
<span class="kn" style="color:rgb(0,112,32);font-weight:bold">import</span> <span class="nn" style="color:rgb(14,132,181);font-weight:bold">vboxapi</span>

<span class="n">app</span> <span class="o" style="color:rgb(102,102,102)">=</span> <span class="n">Flask</span><span class="p">(</span><span class="n">__name__</span><span class="p">)</span>
<span class="n">app</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">config</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">update</span><span class="p">(</span><span class="n">DEBUG</span><span class="o" style="color:rgb(102,102,102)">=</span><span class="bp" style="color:rgb(0,112,32)">True</span><span class="p">)</span>

<span class="n">mgr</span> <span class="o" style="color:rgb(102,102,102)">=</span> <span class="n">vboxapi</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">VirtualBoxManager</span><span class="p">(</span><span class="bp" style="color:rgb(0,112,32)">None</span><span class="p">,</span> <span class="bp" style="color:rgb(0,112,32)">None</span><span class="p">)</span>

<span class="k" style="color:rgb(0,112,32);font-weight:bold">class</span> <span class="nc" style="color:rgb(14,132,181);font-weight:bold">VMLock</span><span class="p">(</span><span class="nb" style="color:rgb(0,112,32)">object</span><span class="p">):</span>
    <span class="k" style="color:rgb(0,112,32);font-weight:bold">def</span> <span class="nf" style="color:rgb(6,40,126)">__init__</span><span class="p">(</span><span class="bp" style="color:rgb(0,112,32)">self</span><span class="p">,</span> <span class="n">vm</span><span class="p">,</span> <span class="n">locktype</span><span class="o" style="color:rgb(102,102,102)">=</span><span class="n">mgr</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">constants</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">LockType_Shared</span><span class="p">):</span>
        <span class="bp" style="color:rgb(0,112,32)">self</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">session</span> <span class="o" style="color:rgb(102,102,102)">=</span> <span class="n">mgr</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">mgr</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">getSessionObject</span><span class="p">(</span><span class="n">mgr</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">vbox</span><span class="p">)</span>
        <span class="bp" style="color:rgb(0,112,32)">self</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">locktype</span> <span class="o" style="color:rgb(102,102,102)">=</span> <span class="n">locktype</span>
        <span class="bp" style="color:rgb(0,112,32)">self</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">vm</span> <span class="o" style="color:rgb(102,102,102)">=</span> <span class="n">vm</span>

    <span class="k" style="color:rgb(0,112,32);font-weight:bold">def</span> <span class="nf" style="color:rgb(6,40,126)">__enter__</span><span class="p">(</span><span class="bp" style="color:rgb(0,112,32)">self</span><span class="p">):</span>
        <span class="bp" style="color:rgb(0,112,32)">self</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">vm</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">lockMachine</span><span class="p">(</span><span class="bp" style="color:rgb(0,112,32)">self</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">session</span><span class="p">,</span> <span class="bp" style="color:rgb(0,112,32)">self</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">locktype</span><span class="p">)</span>
        <span class="k" style="color:rgb(0,112,32);font-weight:bold">if</span> <span class="bp" style="color:rgb(0,112,32)">self</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">session</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">type</span> <span class="o" style="color:rgb(102,102,102)">==</span> <span class="n">mgr</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">constants</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">SessionType_Null</span><span class="p">:</span>
            <span class="k" style="color:rgb(0,112,32);font-weight:bold">raise</span> <span class="ne" style="color:rgb(0,112,32)">Exception</span><span class="p">(</span><span class="s" style="color:rgb(64,112,160)">'session type is null'</span><span class="p">)</span>
        <span class="k" style="color:rgb(0,112,32);font-weight:bold">return</span> <span class="bp" style="color:rgb(0,112,32)">self</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">session</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">console</span>

    <span class="k" style="color:rgb(0,112,32);font-weight:bold">def</span> <span class="nf" style="color:rgb(6,40,126)">__exit__</span><span class="p">(</span><span class="bp" style="color:rgb(0,112,32)">self</span><span class="p">,</span> <span class="nb" style="color:rgb(0,112,32)">type</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">traceback</span><span class="p">):</span>
        <span class="bp" style="color:rgb(0,112,32)">self</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">session</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">unlockMachine</span><span class="p">()</span>


<span class="nd" style="color:rgb(85,85,85);font-weight:bold">@app.route</span><span class="p">(</span><span class="s" style="color:rgb(64,112,160)">'/screenshot'</span><span class="p">)</span>
<span class="k" style="color:rgb(0,112,32);font-weight:bold">def</span> <span class="nf" style="color:rgb(6,40,126)">screenshot</span><span class="p">():</span>
    <span class="n">vm</span> <span class="o" style="color:rgb(102,102,102)">=</span> <span class="n">mgr</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">vbox</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">findMachine</span><span class="p">(</span><span class="s" style="color:rgb(64,112,160)">"My VM"</span><span class="p">)</span>
    <span class="k" style="color:rgb(0,112,32);font-weight:bold">with</span> <span class="n">VMLock</span><span class="p">(</span><span class="n">vm</span><span class="p">)</span> <span class="k" style="color:rgb(0,112,32);font-weight:bold">as</span> <span class="n">console</span><span class="p">:</span>
        <span class="n">display</span> <span class="o" style="color:rgb(102,102,102)">=</span> <span class="n">console</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">display</span>
        <span class="n">current_x</span><span class="p">,</span> <span class="n">current_y</span><span class="p">,</span> <span class="n">bpp</span> <span class="o" style="color:rgb(102,102,102)">=</span> <span class="n">display</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">getScreenResolution</span><span class="p">(</span><span class="mi" style="color:rgb(64,160,112)">0</span><span class="p">)</span>
        <span class="n">response</span> <span class="o" style="color:rgb(102,102,102)">=</span> <span class="n">make_response</span><span class="p">(</span><span class="n">display</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">takeScreenShotPNGToArray</span><span class="p">(</span><span class="mi" style="color:rgb(64,160,112)">0</span><span class="p">,</span> <span class="n">current_x</span><span class="p">,</span> <span class="n">current_y</span><span class="p">))</span>
        <span class="n">response</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">headers</span><span class="p">[</span><span class="s" style="color:rgb(64,112,160)">'Content-Type'</span><span class="p">]</span> <span class="o" style="color:rgb(102,102,102)">=</span> <span class="s" style="color:rgb(64,112,160)">'image/png'</span>
        <span class="k" style="color:rgb(0,112,32);font-weight:bold">return</span> <span class="n">response</span>


<span class="k" style="color:rgb(0,112,32);font-weight:bold">if</span> <span class="n">__name__</span> <span class="o" style="color:rgb(102,102,102)">==</span> <span class="s" style="color:rgb(64,112,160)">'__main__'</span><span class="p">:</span>
    <span class="k" style="color:rgb(0,112,32);font-weight:bold">try</span><span class="p">:</span>
        <span class="n">app</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">run</span><span class="p">(</span><span class="s" style="color:rgb(64,112,160)">'0.0.0.0'</span><span class="p">,</span> <span class="n">debug</span><span class="o" style="color:rgb(102,102,102)">=</span><span class="bp" style="color:rgb(0,112,32)">True</span><span class="p">)</span>
    <span class="k" style="color:rgb(0,112,32);font-weight:bold">except</span><span class="p">:</span>
        <span class="n">app</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">run</span><span class="p">(</span><span class="s" style="color:rgb(64,112,160)">'0.0.0.0'</span><span class="p">,</span> <span class="n">port</span><span class="o" style="color:rgb(102,102,102)">=</span><span class="mi" style="color:rgb(64,160,112)">4999</span><span class="p">,</span> <span class="n">debug</span><span class="o" style="color:rgb(102,102,102)">=</span><span class="bp" style="color:rgb(0,112,32)">True</span><span class="p">)</span></pre>
<pre style="border:none;padding:10px;font-size:13px;font-family:'Bitstream Vera Sans Mono',monospace;margin-top:0px;margin-bottom:0px;overflow:auto"><span class="p"><br></span></pre><pre style="border:none;padding:10px;margin-top:0px;margin-bottom:0px;overflow:auto">
<font face="arial"><span style="white-space:normal">It works just fine when I run it standalone. The problem I'm having starts when I decide to host this micro-application on an nginx webserver. Again, all works fine until I enable more than one worker to listen to more request at once. Then vbox api starts throwing weird exceptions:</span></font></pre>
<pre style="border:none;padding:10px;margin-top:0px;margin-bottom:0px;overflow:auto"><div class="hlcode" style="font-family:'Times New Roman';font-size:medium;white-space:normal;background-color:rgb(255,255,255)">
<div class="syntax" style="background-color:rgb(240,240,240);margin-top:15px;margin-bottom:10px;border-top-width:1px;border-top-style:solid;border-top-color:rgb(204,204,204);border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(204,204,204);background-repeat:initial initial">
<pre style="background-color:transparent;border:none;padding:10px;font-size:13px;font-family:'Bitstream Vera Sans Mono',monospace;margin-top:0px;margin-bottom:0px;overflow:auto"><span class="n">Traceback</span> <span class="p">(</span><span class="n">most</span> <span class="n">recent</span> <span class="n">call</span> <span class="n">last</span><span class="p">):</span>
  <span class="n">File</span> <span class="s" style="color:rgb(64,112,160)">"/usr/lib/python2.7/site-packages/flask/app.py"</span><span class="p">,</span> <span class="n">line</span> <span class="mi" style="color:rgb(64,160,112)">1701</span><span class="p">,</span> <span class="ow" style="color:rgb(0,112,32);font-weight:bold">in</span> <span class="n">__call__</span>
    <span class="k" style="color:rgb(0,112,32);font-weight:bold">return</span> <span class="bp" style="color:rgb(0,112,32)">self</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">wsgi_app</span><span class="p">(</span><span class="n">environ</span><span class="p">,</span> <span class="n">start_response</span><span class="p">)</span>
  <span class="n">File</span> <span class="s" style="color:rgb(64,112,160)">"/usr/lib/python2.7/site-packages/flask/app.py"</span><span class="p">,</span> <span class="n">line</span> <span class="mi" style="color:rgb(64,160,112)">1689</span><span class="p">,</span> <span class="ow" style="color:rgb(0,112,32);font-weight:bold">in</span> <span class="n">wsgi_app</span>
    <span class="n">response</span> <span class="o" style="color:rgb(102,102,102)">=</span> <span class="bp" style="color:rgb(0,112,32)">self</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">make_response</span><span class="p">(</span><span class="bp" style="color:rgb(0,112,32)">self</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">handle_exception</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
  <span class="n">File</span> <span class="s" style="color:rgb(64,112,160)">"/usr/lib/python2.7/site-packages/flask/app.py"</span><span class="p">,</span> <span class="n">line</span> <span class="mi" style="color:rgb(64,160,112)">1687</span><span class="p">,</span> <span class="ow" style="color:rgb(0,112,32);font-weight:bold">in</span> <span class="n">wsgi_app</span>
    <span class="n">response</span> <span class="o" style="color:rgb(102,102,102)">=</span> <span class="bp" style="color:rgb(0,112,32)">self</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">full_dispatch_request</span><span class="p">()</span>
  <span class="n">File</span> <span class="s" style="color:rgb(64,112,160)">"/usr/lib/python2.7/site-packages/flask/app.py"</span><span class="p">,</span> <span class="n">line</span> <span class="mi" style="color:rgb(64,160,112)">1360</span><span class="p">,</span> <span class="ow" style="color:rgb(0,112,32);font-weight:bold">in</span> <span class="n">full_dispatch_request</span>
    <span class="n">rv</span> <span class="o" style="color:rgb(102,102,102)">=</span> <span class="bp" style="color:rgb(0,112,32)">self</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">handle_user_exception</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
  <span class="n">File</span> <span class="s" style="color:rgb(64,112,160)">"/usr/lib/python2.7/site-packages/flask/app.py"</span><span class="p">,</span> <span class="n">line</span> <span class="mi" style="color:rgb(64,160,112)">1358</span><span class="p">,</span> <span class="ow" style="color:rgb(0,112,32);font-weight:bold">in</span> <span class="n">full_dispatch_request</span>
    <span class="n">rv</span> <span class="o" style="color:rgb(102,102,102)">=</span> <span class="bp" style="color:rgb(0,112,32)">self</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">dispatch_request</span><span class="p">()</span>
  <span class="n">File</span> <span class="s" style="color:rgb(64,112,160)">"/usr/lib/python2.7/site-packages/flask/app.py"</span><span class="p">,</span> <span class="n">line</span> <span class="mi" style="color:rgb(64,160,112)">1344</span><span class="p">,</span> <span class="ow" style="color:rgb(0,112,32);font-weight:bold">in</span> <span class="n">dispatch_request</span>
    <span class="k" style="color:rgb(0,112,32);font-weight:bold">return</span> <span class="bp" style="color:rgb(0,112,32)">self</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">view_functions</span><span class="p">[</span><span class="n">rule</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">endpoint</span><span class="p">](</span><span class="o" style="color:rgb(102,102,102)">**</span><span class="n">req</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">view_args</span><span class="p">)</span>
  <span class="n">File</span> <span class="s" style="color:rgb(64,112,160)">"/home/milasch/dev/nginx_test/__init__.py"</span><span class="p">,</span> <span class="n">line</span> <span class="mi" style="color:rgb(64,160,112)">36</span><span class="p">,</span> <span class="ow" style="color:rgb(0,112,32);font-weight:bold">in</span> <span class="n">screenshot</span>
    <span class="n">vm</span> <span class="o" style="color:rgb(102,102,102)">=</span> <span class="n">mgr</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">vbox</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">findMachine</span><span class="p">(</span><span class="s" style="color:rgb(64,112,160)">"My VM"</span><span class="p">)</span>
  <span class="n">File</span> <span class="s" style="color:rgb(64,112,160)">"<XPCOMObject method 'findMachine'>"</span><span class="p">,</span> <span class="n">line</span> <span class="mi" style="color:rgb(64,160,112)">3</span><span class="p">,</span> <span class="ow" style="color:rgb(0,112,32);font-weight:bold">in</span> <span class="n">findMachine</span>
<span class="n">xpcom</span><span class="o" style="color:rgb(102,102,102)">.</span><span class="n">Exception</span><span class="p">:</span> <span class="mh" style="color:rgb(64,160,112)">0x80470007</span> <span class="p">(</span><span class="n">Stream</span> <span class="n">operation</span> <span class="n">would</span> <span class="n">block</span> <span class="p">(</span><span class="n">NS_BASE_STREAM_WOULD_BLOCK</span><span class="p">))</span>
</pre><div><span class="p"><br></span></div></div></div></pre><pre style="border:none;padding:10px;margin-top:0px;margin-bottom:0px;overflow:auto"><font face="arial"><span style="white-space:normal">And these are kind of random, but happen 60-70% of the requests.</span></font></pre>
<pre style="border:none;padding:10px;margin-top:0px;margin-bottom:0px;overflow:auto"><font face="arial"><span style="white-space:normal">Would this be a shared lock issue when I'm locking the VM?</span></font></pre><pre style="border:none;padding:10px;margin-top:0px;margin-bottom:0px;overflow:auto">
<span style="font-family:arial;white-space:normal">Please refer to: </span><span style="font-family:arial;white-space:normal"><a href="http://pastebin.com/fbWXzMMp">http://pastebin.com/fbWXzMMp</a> for full uwsgi output.</span></pre>
<pre style="border:none;padding:10px;margin-top:0px;margin-bottom:0px;overflow:auto"><font face="arial"><span style="white-space:normal">Any advice is appreciated.</span></font></pre></div>