【发布时间】:2017-01-04 08:42:51
【问题描述】:
asyncio docs 读取:
大多数异步对象都不是线程安全的。只有在访问事件循环之外的对象时才应该担心。
有人可以对此进行解释或举例说明滥用 asyncio 如何导致对线程之间共享的对象的不同步写入吗?我认为 GIL 意味着一次只有一个线程可以运行解释器,因此在解释器中发生的事件(例如读取和写入 Python 对象)在线程之间很容易同步。
上面引用中的第二句话听起来像是一个线索,但我不知道该怎么做。
我猜一个线程总是会通过释放 GIL 并决定写入 Python 对象来造成严重破坏,但这并不是 asyncio 特有的,所以我不认为这就是文档所指的内容。
这可能是因为 asyncio PEP 为某些 asyncio 对象保留了不是线程安全的选项,即使目前 CPython 中的实现恰好是线程安全的?
【问题讨论】:
-
有些操作需要多条指令同步,其中Python之间可以由不同的线程解释。 GIL 从不简单地同步 Python 程序,与 asyncio 无关。 -- 它只是确保 Python 对象在 C 级别上是线程安全的,而不是在 Python 级别上。
标签: python python-multithreading python-asyncio cpython thread-synchronization