EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  <20162017  2018  2019  2020  2021  2022  2023  2024  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  <20162017  2018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Re: Is There A Way to Explicitly Close CA Connections in PyEpics?
From: Matt Newville <[email protected]>
To: Weiwei Lu <[email protected]>
Cc: tech-talk <[email protected]>
Date: Tue, 23 Aug 2016 08:24:15 -0500
Hi,


On Fri, Aug 19, 2016 at 10:50 AM, Weiwei Lu <[email protected]> wrote:
Hi Matt,

Many thanks for the suggestions.

> What version of pyepics are you using?

I think I am using pyepics-3.2.1, but not 100% sure.  Is there a command that can tell which version I am using?

You should be able to do
    import epics
    print(epics.__version__)

The latest version of pyepics is 3.2.6, and I'd suggest upgrading to the latest version before trying to diagnose problems.

> Why do you want to do this?

Well, just wanted to make the program more ioc friendly.  Closing the unused connections releases the resources (file descriptors, memory) of the iocs.  My program is a daemon program.  If it does not close the connections it has opened and are no longer needed, those connections will remain open forever. 

Yes, that is true.
 
Also how about the unresolved pv searches; will my program keeps searching those unresolved pvs forever if it does not close them explicitly?  So I think by closing the unused or unresolved pvs, these problems can be avoided.

The CA client library handles how often to search and connect to unresolved PVs.  It seems like it's not often a problem to have a few unresolved PVs.   But that's not to say that it is OK that you cannot fully disconnect from PVs -- you should definitely be able to do that.


>    import gc
>    gc.collect()

Calling gc.collect() after executing pv = None, the connection remained open.  So this does not work.

Hm, weird.  I don't know why that would be (especially given that the code below works).  Upgrading to the latest version might help.
 

>    epics.ca.clear_channel(chid)
>    ctx =epics.ca.current_context()
>    epics.ca._cache[ctx].pop(pvname)

Yes, this works!  This clears the connection and also allows re-creation of a channel on the same pv.


--Matt

References:
Is There A Way to Explicitly Close CA Connections in PyEpics? Weiwei Lu
Re: Is There A Way to Explicitly Close CA Connections in PyEpics? Matt Newville
Re: Is There A Way to Explicitly Close CA Connections in PyEpics? Weiwei Lu

Navigate by Date:
Prev: Re: EPICS and TIA Portal communication Christoph Burandt
Next: Re: Is There A Way to Explicitly Close CA Connections in PyEpics? Weiwei Lu
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  <20162017  2018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Re: Is There A Way to Explicitly Close CA Connections in PyEpics? Weiwei Lu
Next: Re: Is There A Way to Explicitly Close CA Connections in PyEpics? Weiwei Lu
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  <20162017  2018  2019  2020  2021  2022  2023  2024 
ANJ, 23 Aug 2016 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·