【发布时间】:2020-11-29 23:08:00
【问题描述】:
我正在尝试使用 asyncio.run_in_executor 运行我的同步功能
我的协程共享数据和更新数据。 run in executor 启动线程。我需要让我的对象线程和异步安全吗?
import asyncio
from concurrent.futures import ThreadPoolExecutor
class shared:
#complex object
def func(a, b):
# blocking calls
return a + b
async def main(loop):
result = await loop.run_in_executor(None, func, "Hello,", " world!")
UpdateSharedObject(result)
Start main as 5 tasks using create_task
【问题讨论】:
-
是
func调用使用shared的公共实例吗? -
另外,这与您的问题无关,但我只是想确保您知道,由于全局解释器锁定,使用线程池不会让您并行运行纯粹的计算任务。 Python 线程几乎只对 io 绑定代码有用。
-
是的。他们都共享相同的资源。阻塞调用本质上是 io 绑定的。
-
您想从您的阻止功能中访问那些共享对象吗?
-
是的.. 在异步和同步中
标签: python python-asyncio