[Quickfix-users] Quickfix python SocketAcceptor blocks main thread
Brought to you by:
orenmnero
From: <ma...@je...> - 2010-02-26 14:16:07
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><title></title><head><meta http-equiv="Content-type" content="text/html; charset=UTF-8" /><style type="text/css"> html, body {overflow-x: visible; } html { width:100%; height:100%;margin:0px; padding:0px; overflow-y: auto; overflow-x: auto; }body { font-size: 100.01%; font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; background-color:transparent; overflow:show; background-image:none; margin:0px; padding:5px; }p { margin:0px; padding:0px; } body { font-size: 12px; font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; } p { margin: 0; padding: 0; } blockquote { padding-left: 5px; margin-left: 5px; margin-bottom: 0px; margin-top: 0px; } blockquote.quote { border-left: 1px solid #CCC; padding-left: 5px; margin-left: 5px; } .misspelled { background: transparent url(//webmailerng.1und1.de/static_resource/mailclient/widgets/basic/parts/maileditor/spellchecking_underline.gif) repeat-x scroll center bottom; } .correct {} .unknown {} .ignored {}</style></head><body id="bodyElement" style=""> <p>Hi,<span></span></p><p id="__paragraph__1267188525000" style=""><br><span style=""></span></p><p id="__paragraph__1267188525000" style=""><span style="">I tried to use the the executor.py sample. </span><span></span></p><p id="__paragraph__1267188786000" style=""><br><span style=""></span></p><p id="__paragraph__1267188786000" style=""><span style="">I modified it a little:</span><span></span></p><p id="__paragraph__1267188812000" style=""><br><span style=""></span></p><p id="__paragraph__1267188812000" style=""><span style="">...</span><span></span></p><p id="__paragraph__1267188814000" style=""><span style=""> file = sys.argv[1]<br> settings = fix.SessionSettings( file )<br> application = Application()<br> storeFactory = fix.FileStoreFactory( settings )<br> logFactory = fix.FileLogFactory( settings )<br> acceptor = fix.SocketAcceptor( application, storeFactory, settings, logFactory )<br><br> acceptor.start()</span><span></span></p><p id="__paragraph__1267188849000" style=""><br><span style=""></span></p><p id="__paragraph__1267188849000" style=""><span style=""> while 1:</span><span></span></p><p id="__paragraph__1267188856000" style=""><span style=""> time.sleep(10)</span><span></span></p><p id="__paragraph__1267188896000" style=""><span style=""> print 'AFTER SLEEP'<br></span></p><p id="__paragraph__1267188875000" style=""><span style=""> </span><span></span></p><p id="__paragraph__1267188884000" style=""><span style=""> acceptor.stop()<br></span></p><p>....</p><p><br></p><p>The result: print is never executed, it blocks unlimited in time.sleep(10). Even without sleep, the loop blocks after a few seconds.</p><p><br></p><p>I checked the process with truss:</p><p><br></p><p>/2: pollsys(0xFDDF9498, 2, 0xFDDFB500, 0x00000000) = 0<br>/2: times(0xFDDFB480) = 708582828<br>/1: lwp_park(0x00000000, 0) (sleeping...)<br>/2: pollsys(0xFDDF9498, 2, 0xFDDFB500, 0x00000000) = 0<br>/2: times(0xFDDFB480) = 708582928<br>/2: pollsys(0xFDDF9498, 2, 0xFDDFB500, 0x00000000) = 0<br></p><p><br></p><p>It looks as if the thread, started by acceptor.start() blocks the main thread. Without acceptor.start() the code works as expected.</p><p><br></p><p>Is this a bug or as designed? Did I something wrong?<br> <span></span></p><p id="__paragraph__1267188923000" style=""><br><span style=""></span></p><p id="__paragraph__1267188923000" style=""><span style="">Thanks Max</span><span></span></p><p id="__paragraph__1267189365000" style=""><br><span style=""></span></p><p id="__paragraph__1267189365000" style=""><span style="">BTW:</span><span></span></p><p id="__paragraph__1267189523000" style="">There is a mistake in the sample, sessionID and message are in the wrong order:<span></span></p><p id="__paragraph__1267189554000" style=""><span style=""><br></span></p><p id="__paragraph__1267189550000" style=""><span style=""> def toAdmin(self, sessionID, message): return<br> def fromAdmin(self, sessionID, message): return<br> def toApp(self, sessionID, message): return<br><br></span></p><p id="__paragraph__1267189523000" style=""><span style=""><br></span></p><span style=""></span><basefont size="2" face="Verdana"></body></html> |