<div dir="ltr">Here is the solution I came up with:<blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>import _omnipy</div><div>_omnipy_invoke = _omnipy.invoke</div><div> </div><div>def invoke_mk2(*args):</div><div>   import gc</div><div>   gc_flag = gc.isenabled()</div><div>   try:</div><div>     if gc_flag: gc.disable()</div><div>     return _omnipy_invoke(*args)</div><div>   finally:</div><div>     if gc_flag: gc.enable()</div><div> </div><div>_omnipy.invoke = invoke_mk2</div></blockquote><div><br></div>Apparently problem this snippet solves was addressed in Python 2.7. Though, I would imagine switching off GC completely is still better than reducing number of collections.<div><br></div><div>Duncan, you might want to include it in omniORB at some point :-)<br><div><br></div><div><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jan 16, 2015 at 7:37 PM, Michael Kilburn <span dir="ltr">&lt;<a href="mailto:crusader.mike@gmail.com" target="_blank">crusader.mike@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class="">On Fri, Jan 16, 2015 at 9:07 AM, Duncan Grisby <span dir="ltr">&lt;<a href="mailto:duncan@grisby.org" target="_blank">duncan@grisby.org</a>&gt;</span> wrote:<br></span><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class=""><span>On Mon, 2015-01-12 at 23:48 -0600, Michael Kilburn wrote:<br></span></span><span class=""><span>&gt; Is there any easy way in omniOrbPy to automatically switch gc off in<br>
&gt; every outgoing call? (and then switch it back once all data is<br>
&gt; received and converted to python objects)<br>
<br>
</span>You could register clientSendRequest and clientReceiveReply interceptors<br>
to disable and then re-enable the GC. Beware that if your code is<br>
multi-threaded, the GC is a global option, so your threads could tread<br>
on each other.<br></span></blockquote><div> </div><div>Nope... Tested it today -- it does not work the way I need. clientReceiveReply gets called before incoming data gets converted into Python types and I suspect clientSendRequest is similar.</div><div><br></div><div>Basically I am looking for an easy way to get effect (equivalent to following pseudo-code) applied to every CORBA call in my python app:</div><div><br></div><div>before:</div><div>      data = myObj-&gt;corba_method();</div><div><br></div><div>after:</div><div>     gc.disable()</div><div>     data = myObj-&gt;corba_method();</div><div>     gc.enable();</div><div><br></div><div>(well, obviously it needs to be more robust than that, take care of MT issues -- but it is irrelevant on this stage).</div><div><br></div><div>Any ideas?</div><div><br></div><div>P.S. In case if you think I am nuts -- in my case this difference translates into 10 vs 160 seconds of  execution time (i.e. up to 16-fold speedup). Yep, we move around large number of very tiny Python objects.</div><div><br></div></div>
</div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Sincerely yours,<br>Michael.</div>
</div></div></div>