From dddaa295268490edc8de42af52ffeb2c22c48973 Mon Sep 17 00:00:00 2001 From: David Wilson Date: Thu, 5 Oct 2017 17:09:59 +0530 Subject: [PATCH] docs: Get started on Getting Started --- docs/getting_started.rst | 116 ++++++- docs/howitworks.rst | 3 + docs/images/layout.graphml | 665 +++++++++++++++++++++++++++++++++++++ docs/images/layout.png | Bin 0 -> 26684 bytes docs/images/radiation.png | Bin 0 -> 15305 bytes 5 files changed, 782 insertions(+), 2 deletions(-) create mode 100644 docs/images/layout.graphml create mode 100644 docs/images/layout.png create mode 100644 docs/images/radiation.png diff --git a/docs/getting_started.rst b/docs/getting_started.rst index 264fab78..a205d203 100644 --- a/docs/getting_started.rst +++ b/docs/getting_started.rst @@ -2,7 +2,98 @@ Getting Started =============== -xxx +.. warning:: + + This section is incomplete. + + +Liability Waiver +---------------- + +.. image:: images/radiation.png + :align: right + +Before proceeding, it is crucial you understand what you're involving yourself +and possibly your team with: + +* Constructing the most fundamental class, :py:class:`Broker + `, causes a new thread to be spawned, exposing a huge + class of difficult to analyse behaviours that Python software generally does + not suffer from. + + While every effort is made to hide this complexity, you should expect + threading-related encounters during development. See :ref:`troubleshooting` + for more information. + +* While high-level abstractions are provided, you must understand how Mitogen + works before depending on it. Mitogen interacts with many aspects of the + operating system, network, SSH, sudo, sockets, TTYs, Python runtime, and + timing and ordering uncertainty introduced through interaction with the + network and OS scheduling. + + Knowledge of this domain is typically gained through painful years of ugly + attempts hacking system-level programs, and learning through continual + suffering how to debug the messes left behind. If you feel you lack resources + to diagnose problems independently, Mitogen is not appropriate, prefer a + higher level solution instead. Bug reports failing this expectation risk + unfavourable treatment. + + +Broker And Router +----------------- + +.. image:: images/layout.png +.. currentmodule:: mitogen.master + +Execution starts when your program constructs a :py:class:`Broker` and +associated :py:class:`Router`. The broker is responsible for multiplexing IO to +children from a private thread, while in children, it is additionally +responsible for ensuring robust destruction if communication with the master +is lost. + +:py:class:`Router` is responsible for receiving messages and either dispatching +them to a callback from the broker thread (registered by +:py:meth:`add_handler() `), or forwarding them +to a :py:class:`Stream `. See :ref:`routing` for an +in-depth description. :py:class:`Router` also doubles as the entry point to +Mitogen's public API. + +.. code-block:: python + + broker = mitogen.master.Broker() + router = mitogen.master.Router(broker) + + try: + # Your code here. + finally: + broker.shutdown() + +As your program will not exit if threads are still running when the main thread +exits, it is crucial :py:meth:`Broker.shutdown` is called reliably at exit. +Helpers are provided by :py:mod:`mitogen.utils` to ensure :py:class:`Broker` is +reliably destroyed: + +.. code-block:: python + + def do_mitogen_stuff(router): + # Your code here. + + mitogen.utils.run_with_router(do_mitogen_stuff) + +If your program cannot live beneath :py:func:`mitogen.utils.run_with_router` on +the stack, you must must arrange for :py:meth:`Broker.shutdown` to be called +anywhere exit of the main thread may be triggered. + + +Creating A Context +------------------ + +Contexts simply refer to external Python programs over which your program has +control. They can be created as subprocesses on the local machine, in another +user account via ``sudo``, on a remote machine via ``ssh``, and in any +recursive combination of the above. + +Now a :py:class:`Router` exists, our first :py:class:`Context` can be created. .. _serialization-rules: @@ -28,4 +119,25 @@ User-defined types may not be used, except for: * :py:class:`mitogen.core.CallError` * :py:class:`mitogen.core.Context` -* :py:class:`mitogen.core._Dead` +* :py:class:`mitogen.core._DEAD` + + +.. _troubleshooting: + +Troubleshooting +--------------- + +.. warning:: + + This section is incomplete. + +A typical example is a hang due to your application's main thread exitting +perhaps due to an unhandled exception, without first arranging for any +:py:class:`Broker ` to be shut down gracefully. + +Another example would be your main thread hanging indefinitely because a bug +in Mitogen fails to notice an event (such as RPC completion) your thread is +waiting for will never complete. Solving this kind of hang is a work in +progress. + +router.enable_debug() diff --git a/docs/howitworks.rst b/docs/howitworks.rst index 5b9a4dc0..e624af37 100644 --- a/docs/howitworks.rst +++ b/docs/howitworks.rst @@ -398,6 +398,9 @@ presence of many machines, and would require manually splitting up the parts of Twisted that we would like to use. + +.. _routing: + Message Routing --------------- diff --git a/docs/images/layout.graphml b/docs/images/layout.graphml new file mode 100644 index 00000000..4aa1f95e --- /dev/null +++ b/docs/images/layout.graphml @@ -0,0 +1,665 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Master + + + + + + + + + + Folder 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Context + + + + + + + + + call(func, *args) +send(msg) + + + + + + + + + + + + + Broker + + + + + + + + + start_transmit(strm) +stop_transmit(strm) + + + + + + + + + + + + Broker Thread + + + + + + + + + + + + + + + + + + User Threads + + + + + + + + + + + + + + + + + + + Router + + + + + + + + handlers[] + ssh(hostname=...) +sudo(username=...) +route(msg) + + + + + + + + + + + + + Stream + + + + + + + + + send() +on_transmit() + + + + + + + + + + + + + Channel + + + + + + + + + put() + + + + + + + + + + + + + + + + + Child + + + + + + + + + + Folder 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Broker + + + + + + + + + start_receive(strm) +stop_receive(strm) + + + + + + + + + + + + Broker Thread + + + + + + + + + + + + + + + + + + Main Thread + + + + + + + + + + + + + + + + + + + Router + + + + + + + + handlers[] + route(msg) + + + + + + + + + + + + + Stream + + + + + + + + + send() +on_receive() + + + + + + + + + + + + + ExternalContext + + + + + + + + + _dispatch_calls() + + + + + + + + + + + + + Channel + + + + + + + + CALL_FUNCTION + get() + + + + + + + + + + + + + + Network + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/layout.png b/docs/images/layout.png new file mode 100644 index 0000000000000000000000000000000000000000..2c4d952438fe3f0bffd6f4fa3766eded69c5d520 GIT binary patch literal 26684 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 HokIT~!tLbr literal 0 HcmV?d00001 diff --git a/docs/images/radiation.png b/docs/images/radiation.png new file mode 100644 index 0000000000000000000000000000000000000000..3181a3691c3d8af250fe9cc6a01921ebd1c884dd GIT binary patch literal 15305 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 HFz9~);enD) literal 0 HcmV?d00001