<div dir="ltr">Hello,<div><br></div><div style>I&#39;m wondering if this I&#39;m approaching this problem correctly or not.  I&#39;ve got an ipython engine running on a remote machine.  I would like to stream data from that engine to the client and for the client to be able turn that stream off at a later point.</div>
<div style><br></div><div style>My scenario is I&#39;d like to have an engine return results from a tailable mongodb cursor.   Here is one approach I&#39;ve taken.</div><div style><br></div><div style>1. get a directview instance to remote engine.</div>
<div style>2. load module on engine which has functions for doing mongo tail</div><div style>3. tail function looks something like this utilizing publish_data in kernel zmq package.</div><div style><br></div><div style><div>
def tail(query={}):</div><div>    c = mongo_collection.find(query, await_data=True, tailable=True)</div><div style>    while c.isalive:</div><div style>        publish_data(c.next())</div><div style><br></div><div><br></div>
</div><div style>4. from the client I can call this function an get an asyncresult back.</div><div style>5. I can continually call data on the result and everything works fine.</div><div style><br></div><div style>The problem comes when I want to turn the tail off.  I can&#39;t invoke any more function calls because the tail function is essentially running forever and blocking.  So I naturally tried executing a portion of the code in a thread.  The problem with that approach is the tail function returns and publish_data calls from the running thread are no longer bound to the asyncresult.</div>
<div style><br></div><div style>Once the tail function returns the thread is still executing on the engine, where does the data from publish_data actually go?  If I can&#39;t get to it from asyncresult how else would I get to it?  Would i have to dig into the guts of the zmq IOPub channel ?</div>
<div style><br></div><div style>Regards,</div><div style>Brian</div></div>