diff --git a/MANIFEST b/MANIFEST new file mode 100644 index 0000000..ced067e --- /dev/null +++ b/MANIFEST @@ -0,0 +1,4 @@ +# file GENERATED by distutils, do NOT edit +setup.cfg +setup.py +seppuku/__init__.py diff --git a/README.md b/README.md index fac3666..e4c71cd 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,6 @@ # asyncio-seppuku sends signal to current pid after specified delay + +## Usage: +See examples/simple.py + diff --git a/examples/simple.py b/examples/simple.py new file mode 100644 index 0000000..5ab6ded --- /dev/null +++ b/examples/simple.py @@ -0,0 +1,21 @@ +import asyncio +from datetime import datetime + +from seppuku import killme_after + +loop = asyncio.get_event_loop() + + +def run(): + start_time = datetime.now() + print('Started') + + killme_after(2, loop) + try: + loop.run_forever() + except KeyboardInterrupt: + print('KeyboardInterrupt after {}'.format(datetime.now() - start_time)) + + +if __name__ == '__main__': + run() diff --git a/seppuku/__init__.py b/seppuku/__init__.py new file mode 100644 index 0000000..bcaab74 --- /dev/null +++ b/seppuku/__init__.py @@ -0,0 +1,17 @@ +import os, signal + + +def killme_after(delay, loop, sig='SIGINT', pid=None): + """ + :param delay: delay in seconds to execute signal + :param loop: asyncio event loop + :param sig: signal (string), must presents in signal package + :param pid: PID (default is current PID) + :return: + """ + if not hasattr(signal, sig): + print('unknown signal "%s"' % sig) + else: + if not getattr(loop, 'sig_%s' % sig, False): + loop.call_later(delay, os.kill, pid or os.getpid(), getattr(signal, sig)) + setattr(loop, 'sig_%s' % sig, True) diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..224a779 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[metadata] +description-file = README.md \ No newline at end of file diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..57958c1 --- /dev/null +++ b/setup.py @@ -0,0 +1,20 @@ +from distutils.core import setup + +setup( + name='asyncio-seppuku', + packages=['seppuku'], + version='0.1.0', + description='Sending kill signal after specified delay', + author='jar3b', + author_email='hellotan@live.ru', + url='https://github.com/jar3b/asyncio-seppuku', + download_url='https://github.com/jar3b/asyncio-seppuku/archive/0.1.0.tar.gz', + keywords='asyncio signal python3', + classifiers=[ + 'Development Status :: 3 - Alpha', + 'License :: OSI Approved :: MIT License', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + ], +)