浏览代码

doc: add doc about `defer_call()`

wangweimin 5 年之前
父节点
当前提交
c2da77a1ae
共有 2 个文件被更改,包括 12 次插入2 次删除
  1. 10 2
      docs/guide.rst
  2. 2 0
      pywebio/session/__init__.py

+ 10 - 2
docs/guide.rst

@@ -246,8 +246,16 @@ PyWebIO 支持在多线程环境中使用。
 **Server mode**
 
 Server mode 下,由于对多会话的支持,如果需要在新创建的线程中使用PyWebIO的交互函数,需要手动调用 `register_thread(thread) <pywebio.session.register_thread>` 对新进程进行注册。
-如果新创建的线程中没有使用到PyWebIO的交互函数,则无需注册。
-当当前会话的任务函数和会话内通过 `register_thread(thread) <pywebio.session.register_thread>` 注册的线程都结束运行时,会话关闭。
+如果新创建的线程中没有使用到PyWebIO的交互函数,则无需注册。在没有使用 `register_thread(thread) <pywebio.session.register_thread>` 注册的线程内调用PyWebIO的交互函数将会产生异常。
+当会话的任务函数和会话内通过 `register_thread(thread) <pywebio.session.register_thread>` 注册的线程都结束运行时,会话关闭。
+
+会话的结束
+^^^^^^^^^^^^^^
+
+会话还会因为用户的关闭浏览器而结束,这时当前会话内对于PyWebIO交互函数的调用也将产生异常。
+
+可以使用 `defer_call(func) <pywebio.session.defer_call>` 来设置会话结束时需要调用的函数。无论是用户主动关闭会话还是任务结束会话关闭,设置的函数都会被执行。
+可以用于资源清理等工作。在会话中可以多次调用 `defer_call() <pywebio.session.defer_call>` ,会话结束后将会顺序执行设置的函数。
 
 
 与Web框架集成

+ 2 - 0
pywebio/session/__init__.py

@@ -2,6 +2,8 @@ r"""
 .. autofunction:: run_async
 .. autofunction:: run_asyncio_coroutine
 .. autofunction:: register_thread
+.. autofunction:: defer_call
+
 .. autoclass:: pywebio.session.coroutinebased.TaskHandle
    :members:
 """