Re: Stopping PEAK application on SIGINT
Alexey Smishlayev <[email protected]> Wed, 30 Sep 2015 00:56:00 +0300
| Newsgroups | gmane.comp.python.peak |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format. --===============0199337447== Content-Type: multipart/alternative; boundary="------------060903020607030605010308" This is a multi-part message in MIME format. --------------060903020607030605010308 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Hello, Phillip! I use binding.Obtain() on "peak.running.interfaces.IMainLoop", which seem to be instantiating as "peak.running.scheduler.MainLoop" and the "peak.events.interfaces.IEventLoop" is bound to "peak.events.twisted_support.EventLoop". Did not go that far, looked at the PEAK default event loop and couldn't figure out what's wrong (without investgating links in the project's .ini file). Does that mean I cannot use stopOnSignals with the Twisted event loop? Do I have to implement that method? I believe, it's used because Twisted handles TCP communications for us. Best regards, Alexey Smishlayev On 30/09/15 00:27, PJ Eby wrote: > Which event loop are you using? Twisted, the PEAK default, or > something else? The issue here appears to be that the eventLoop > property of the MainLoop instance lacks a `signals()` method -- which > would seem to mean it doesn't fully implement IEventLoop or is the > wrong type of object to start with. > > On Tue, Sep 29, 2015 at 8:06 AM, Alexey Smishlayev <[email protected]> wrote: >> Good day everyone! >> I would like my PEAK application to stop on ^C or SIGINT. Currently, in that >> case I get an output something like >> >>> 29.09.2015 14:56:48.179 [DEBUG] Connect.twisted Unexpected error in main >>> loop. >>> 29.09.2015 14:56:48.190 [ERROR] Connect.twisted Traceback (most recent >>> call last): >>> 29.09.2015 14:56:48.190 [ERROR] File >>> "/Users/alexey/xtech2/tester/build/lib/ank/BBS/CommandBase.py", line 38, in >>> run >>> 29.09.2015 14:56:48.190 [ERROR] self.mainLoop.run() >>> 29.09.2015 14:56:48.190 [ERROR] File >>> "/Library/Python/2.7/site-packages/peak/running/scheduler.py", line 78, in >>> run >>> 29.09.2015 14:56:48.190 [ERROR] return >>> self.eventLoop.runUntil(self.exitCode,True,idle=self.sleep)[0] >>> 29.09.2015 14:56:48.190 [ERROR] File >>> "/Library/Python/2.7/site-packages/peak/events/twisted_support.py", line >>> 186, in runUntil >>> 29.09.2015 14:56:48.190 [ERROR] self.reactor.run(False) >>> 29.09.2015 14:56:48.190 [ERROR] File >>> "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/base.py", >>> line 1192, in run >>> 29.09.2015 14:56:48.190 [ERROR] self.mainLoop() >>> 29.09.2015 14:56:48.190 [ERROR] --- <exception caught here> --- >>> 29.09.2015 14:56:48.190 [ERROR] File >>> "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/base.py", >>> line 1204, in mainLoop >>> 29.09.2015 14:56:48.190 [ERROR] self.doIteration(t) >>> 29.09.2015 14:56:48.190 [ERROR] File >>> "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/selectreactor.py", >>> line 105, in doSelect >>> 29.09.2015 14:56:48.190 [ERROR] [], timeout) >>> 29.09.2015 14:56:48.190 [ERROR] exceptions.KeyboardInterrupt: >> in the log file. In CommandBase.py attribute self.mainloop is defined as >> >>> from peak.api import binding >>> from peak.running import commands, interfaces >>> class CommandBase(commands.EventDriven): >>> mainLoop = binding.Obtain(interfaces.IMainLoop) >>> ... >> If I set "peak.running.mainLoop.stopOnSignals" in my project's .ini file to >> anything else except empty tuple, on the application's startup I get the >> following error (I tried "stopOnSignals = ('SIGINT',)") >> >>> Traceback (most recent call last): >>> File "../ank/BBS/Assembler.py", line 370, in run >>> _exitCode = _root.run() >>> File "/Library/Python/2.7/site-packages/peak/running/commands.py", line >>> 229, in run >>> return self._run() or 0 >>> File "/Library/Python/2.7/site-packages/peak/running/commands.py", line >>> 509, in _run >>> return self.invoke() >>> File "/Users/alexey/xtech2/tester/build/lib/ank/BBS/CommandBase.py", >>> line 38, in run >>> self.mainLoop.run() >>> File "/Library/Python/2.7/site-packages/peak/running/scheduler.py", line >>> 66, in run >>> handler = self.eventLoop.signals(*self.stopOnSignals) >>> File "_once.pyx", line 112, in _once.BaseDescriptor.__get__ >>> File "_once.pyx", line 100, in _once.__get__ >>> File "/Library/Python/2.7/site-packages/peak/binding/components.py", >>> line 682, in delegate >>> return getattr(getattr(s,delegateAttr),a) >>> File "_once.pyx", line 112, in _once.BaseDescriptor.__get__ >>> File "_once.pyx", line 100, in _once.__get__ >>> File "/Library/Python/2.7/site-packages/peak/binding/components.py", >>> line 682, in delegate >>> return getattr(getattr(s,delegateAttr),a) >>> File "_once.pyx", line 88, in _once.BaseDescriptor.__get__ >>> AttributeError: ('Recursive attempt to compute attribute', 'signals') >> How do I do everything correctly? >> >> >> Best regards, >> Alexey Smishlayev >> >> _______________________________________________ >> PEAK mailing list >> [email protected] >> http://www.eby-sarna.com/mailman/listinfo/peak --------------060903020607030605010308 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: 7bit <html> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> </head> <body bgcolor="#FFFFFF" text="#000000"> Hello, Phillip!<br> <br> I use binding.Obtain() on "peak.running.interfaces.IMainLoop", which seem to be instantiating as "peak.running.scheduler.MainLoop" and the "peak.events.interfaces.IEventLoop" is bound to "peak.events.twisted_support.EventLoop". Did not go that far, looked at the PEAK default event loop and couldn't figure out what's wrong (without investgating links in the project's .ini file).<br> <br> Does that mean I cannot use stopOnSignals with the Twisted event loop? Do I have to implement that method? I believe, it's used because Twisted handles TCP communications for us.<br> <br> <br> Best regards,<br> Alexey Smishlayev <meta http-equiv="content-type" content="text/html; charset=utf-8"> <br> <br> <br> <div class="moz-cite-prefix">On 30/09/15 00:27, PJ Eby wrote:<br> </div> <blockquote cite="mid:CALeMXf4_gS0H3fObL8+W=uByoVUCTmO9yDvd2nHRvhRXKX8UjQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org" type="cite"> <pre wrap="">Which event loop are you using? Twisted, the PEAK default, or something else? The issue here appears to be that the eventLoop property of the MainLoop instance lacks a `signals()` method -- which would seem to mean it doesn't fully implement IEventLoop or is the wrong type of object to start with. On Tue, Sep 29, 2015 at 8:06 AM, Alexey Smishlayev <a class="moz-txt-link-rfc2396E" href="mailto:[email protected]"><[email protected]></a> wrote: </pre> <blockquote type="cite"> <pre wrap="">Good day everyone! I would like my PEAK application to stop on ^C or SIGINT. Currently, in that case I get an output something like </pre> <blockquote type="cite"> <pre wrap="">29.09.2015 14:56:48.179 [DEBUG] Connect.twisted Unexpected error in main loop. 29.09.2015 14:56:48.190 [ERROR] Connect.twisted Traceback (most recent call last): 29.09.2015 14:56:48.190 [ERROR] File "/Users/alexey/xtech2/tester/build/lib/ank/BBS/CommandBase.py", line 38, in run 29.09.2015 14:56:48.190 [ERROR] self.mainLoop.run() 29.09.2015 14:56:48.190 [ERROR] File "/Library/Python/2.7/site-packages/peak/running/scheduler.py", line 78, in run 29.09.2015 14:56:48.190 [ERROR] return self.eventLoop.runUntil(self.exitCode,True,idle=self.sleep)[0] 29.09.2015 14:56:48.190 [ERROR] File "/Library/Python/2.7/site-packages/peak/events/twisted_support.py", line 186, in runUntil 29.09.2015 14:56:48.190 [ERROR] self.reactor.run(False) 29.09.2015 14:56:48.190 [ERROR] File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/base.py", line 1192, in run 29.09.2015 14:56:48.190 [ERROR] self.mainLoop() 29.09.2015 14:56:48.190 [ERROR] --- <exception caught here> --- 29.09.2015 14:56:48.190 [ERROR] File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/base.py", line 1204, in mainLoop 29.09.2015 14:56:48.190 [ERROR] self.doIteration(t) 29.09.2015 14:56:48.190 [ERROR] File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/selectreactor.py", line 105, in doSelect 29.09.2015 14:56:48.190 [ERROR] [], timeout) 29.09.2015 14:56:48.190 [ERROR] exceptions.KeyboardInterrupt: </pre> </blockquote> <pre wrap=""> in the log file. In CommandBase.py attribute self.mainloop is defined as </pre> <blockquote type="cite"> <pre wrap="">from peak.api import binding from peak.running import commands, interfaces class CommandBase(commands.EventDriven): mainLoop = binding.Obtain(interfaces.IMainLoop) ... </pre> </blockquote> <pre wrap=""> If I set "peak.running.mainLoop.stopOnSignals" in my project's .ini file to anything else except empty tuple, on the application's startup I get the following error (I tried "stopOnSignals = ('SIGINT',)") </pre> <blockquote type="cite"> <pre wrap="">Traceback (most recent call last): File "../ank/BBS/Assembler.py", line 370, in run _exitCode = _root.run() File "/Library/Python/2.7/site-packages/peak/running/commands.py", line 229, in run return self._run() or 0 File "/Library/Python/2.7/site-packages/peak/running/commands.py", line 509, in _run return self.invoke() File "/Users/alexey/xtech2/tester/build/lib/ank/BBS/CommandBase.py", line 38, in run self.mainLoop.run() File "/Library/Python/2.7/site-packages/peak/running/scheduler.py", line 66, in run handler = self.eventLoop.signals(*self.stopOnSignals) File "_once.pyx", line 112, in _once.BaseDescriptor.__get__ File "_once.pyx", line 100, in _once.__get__ File "/Library/Python/2.7/site-packages/peak/binding/components.py", line 682, in delegate return getattr(getattr(s,delegateAttr),a) File "_once.pyx", line 112, in _once.BaseDescriptor.__get__ File "_once.pyx", line 100, in _once.__get__ File "/Library/Python/2.7/site-packages/peak/binding/components.py", line 682, in delegate return getattr(getattr(s,delegateAttr),a) File "_once.pyx", line 88, in _once.BaseDescriptor.__get__ AttributeError: ('Recursive attempt to compute attribute', 'signals') </pre> </blockquote> <pre wrap=""> How do I do everything correctly? Best regards, Alexey Smishlayev _______________________________________________ PEAK mailing list <a class="moz-txt-link-abbreviated" href="mailto:[email protected]">[email protected]</a> <a class="moz-txt-link-freetext" href="http://www.eby-sarna.com/mailman/listinfo/peak">http://www.eby-sarna.com/mailman/listinfo/peak</a> </pre> </blockquote> <pre wrap=""> </pre> </blockquote> <br> </body> </html> --------------060903020607030605010308-- --===============0199337447== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ PEAK mailing list [email protected] http://www.eby-sarna.com/mailman/listinfo/peak --===============0199337447==--