Python DPM API » History » Version 10
Python DPM API¶
The Python DPM API is available for use on the clx nodes.
NOTE: This is still an experimental module. Feedback from our users is greatly appreciated.
The DPM module supports two styles of programming, blocking and polling. If your script is driven by the arrival of data, you probably want to use the blocking API.
This is a simple, blocking script to print
M:OUTTMP at 1Hz:
import DPM dpm = DPM.Blocking() dpm.addEntry(0, 'M:OUTTMP@e,8f') dpm.start() for ii in dpm.process(): print ii
If your script does other things and occasionally wants to check if data has arrived, use the polling API. Each call to
DPM.pending() returns all the items that have arrived since the previous call. In this example, after processing all the pending data, the script sleeps before looping back and handling more data that has arrived.
import time import DPM dpm = DPM.Polling() dpm.addEntry(0, "M:OUTTMP@e,8f") dpm.start() while True: for ii in dpm.pending(): print ii print 'sleeping...' time.sleep(1.5)
The DPM class supports Python's context manager protocol, so it can be used in a
with-statement. The benefit of this is, when the scope of the
with-statement is exited, the DPM object immediately closes its connection with DPM. In the previous examples, the connection gets closed when the garbage collector eventually reclaims the DPM object (of course, this example never exits, so the use of
with is unnecessary.)
import time import DPM with DPM.Polling() as dpm: dpm.addEntry(0, "M:OUTTMP@e,8f") dpm.start() while True: for ii in dpm.pending(): print ii print 'sleeping...' time.sleep(1.5)
Use Resources Responsibly¶
The DPM object creates an underlying
acnet.Connection object. For a script that simply uses one DPM object, this is fine. However, if you want to create multiple DPM objects, or if your script uses another (not yet written) Acnet service, you should reduce your resource usage. Specifically, all Acnet services should share one Acnet connection object. The DPM constructors take an optional parameter which specifies an Acnet connection to use rather than create its own. For instance:
con = acnet.Connection() dpm1 = DPM.Polling(con) dpm2 = DPM.Polling(con)