Metadata-Version: 2.1
Name: xtimeout
Version: 0.1.3
Summary: Trace a timeout function call and handle with it
Home-page: https://github.com/amos402/py-xtimeout
Author: amos402
Author-email: amos_402@msn.com
License: MIT
Keywords: timeout,inject,timeout handler,function timetout
Platform: UNKNOWN
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: C++
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python

`中文 <https://github.com/amos402/py-xtimeout/blob/master/README_zh.md>`__
=======================

Check function with timeout for tracing or handle it
====================================================

Feature
=======

-  Check a function call is timeout or not.
-  The timeout callback and function call are on the same thread.
-  Multi-thread support. Nest call support.

Usage
=====

.. code:: python

    def on_timeout(start_time: float):
        """
        :param start_time: 
        """
        traceback.print_stack()
        pdb.set_trace()
        raise Exception("time_out")

    # time unit is millisecond
    @pymonitor.check_time(10, on_timeout)
    def function_1():
        pass

    def function_2():
        with pymonitor.check_context(20, on_timeout):
            # do something
            with pymonitor.check_context(10, on_timeout):
                # do something

Implementation Comparison
=========================

Here are some comparisons of the other implementations.

-  Use ``signal`` module and emit a signal

   -  Only works in main thread.
   -  Not good for nest call becauseof one signal correspond one
      handler.
      If you need nest support you need to enter the timeout function
      continually
      and call ``alarm``. The cost depend on your accuracy.
   -  Support Linux only.

-  Start new thread for work and join it with a time, if it had timeout,
   handle with it (eg. terminate it)

   -  Can’t inject the function call.
   -  Overhead from threading.

-  Use ``sys.settrace`` keep tracing for each

   -  A huge cost for that.


