<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal>I am still working on using Python to connect my lab&#8217;s
data acquisition hardware to a program called RBNB or Data Turbine.&nbsp; As
David suggested, I am now converting the existing fake_daq program from c to
python.&nbsp; As of now I have two main questions / problems:<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>The first problem is that my threads seem to &#8220;hang&#8221;
the interpreter and I have to forcefully shut it down.&nbsp; I have two threads
I am trying to start and whichever one I try to start first, the interpreter
hangs and the second one never starts.&nbsp; I&#8217;ve done some research but
I&#8217;m hoping somebody can tell me if I am on the right track or if there is
something else I should be looking for.&nbsp; I found this post on python.org &nbsp;which
seems similar to what I am experiencing: <o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><a
href="http://mail.python.org/pipermail/python-list/2001-April/080386.html">http://mail.python.org/pipermail/python-list/2001-April/080386.html</a>
<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>After reading this I started to look for any calls that
could be blocking and causing the interpreter to hang.&nbsp; I think most of
the calls I&#8217;m making shouldn&#8217;t affect the interpreter&#8217;s
ability to switch threads but I&#8217;ve been trying to make them all
non-blocking anyway.&nbsp; So far I&#8217;ve tried to make all of the socket
calls non-blocking by using the select() function to check the port before
sending data.&nbsp; I also switched to Queue.put_nowait() and
Queue.get_nowait().&nbsp; I am using time.strftime() but I don&#8217;t think
this would block the interpreter.&nbsp; In one of the threads I use a function
which accesses a shared variable to see which channels are active.&nbsp; This
function has to acquire a lock before accessing the shared data so this could
potentially be a problem &#8230; but this is only used in one of the threads
and both of them seem to be hanging.&nbsp; <o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>The second question / problem relates to closing down my
program.&nbsp; &nbsp;The C code that I am basing my Python code on is setup to
capture a keyboard interrupt event (ie control-c or control-break) which it
uses to stop streaming data, issue a &#8220;Daq Stop&#8221; event to data
turbine, and properly close down the sockets.&nbsp; How can I capture this
event in my Python code?&nbsp; I looked at different options using try and
except but I never could get anything to work correctly.&nbsp; It seems that by
using try, I will only capture the event if the code related to the try
statement is running.&nbsp; I want to capture the event no matter what part of
the code is running.&nbsp; Is there an easy way to do this?<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>My Python code and an executable java program which was
written to validate the communication protocol can be downloaded here:<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><a href="http://www.cfl.ncsu.edu/temp/CFL_Daq.py">http://www.cfl.ncsu.edu/temp/CFL_Daq.py</a><o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><a href="http://www.cfl.ncsu.edu/temp/dndtester.jar">http://www.cfl.ncsu.edu/temp/dndtester.jar</a><o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Thanks,<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Lee<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

</body>

</html>