[PEAK] Stopping PEAK application on SIGINT

Alexey Smishlayev alexey at xtech2.lv
Tue Sep 29 08:06:03 EDT 2015


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.eby-sarna.com/pipermail/peak/attachments/20150929/289861c8/attachment.html


More information about the PEAK mailing list