Python 是异步 asyncio 并行吗?

问题描述 投票:0回答:1

async def task():
    async def func():
            '''takes forever to run the calculation, not doing requests'''

            return something
    result = await func()

我希望任何回答这个问题的人都需要知道我没有被要求接受并发和并行概念的教育。 我的问题只关注“等待”。 当事件循环管理器遇到await时,它会暂停当前任务并切换到另一个任务。 (简单部分) 问题:当函数暂停时,这里假设 func() 具有复杂的计算,需要很长时间才能返回值。该函数是否运行? 如果函数 run 和循环管理器 run 中的计算同时切换到另一个任务 - 并行性。 如果它是蹩脚的一个线程,它会在函数上放置一个“暂停”标签,因此它会切换到另一个任务,因此 func1 被冻结,永远不会运行,并且当它从未运行时它如何知道它完成了?

如果你只是说不是并行请不要回答。

python asynchronous parallel-processing python-asyncio
1个回答
0
投票

它是一个线程,一个线程不是并行的,因为ChatGPT正确生成。这就像您试图同时编写 500 个程序一样。你可以从编写一个程序切换到编写另一个程序,并且你“正在编写 500 个程序”,但当时你只为其中一个程序编写代码 - 你不能并行编写两个程序,为此你需要 2 名程序员。同样,您需要 2 个核心才能并行运行。

“循环管理器运行时,有 500 个 func() 正在运行,是并行性吗?” - 不,不是。

“涉及到并行性,他们如何使用核心?”一切都在单个线程、单个核心上运行,单个进程只是从一个任务切换到另一个任务。

“[..]经理如何知道任务已完成,是否会回电?” - 一旦所有任务完成,整体工作就完成了。

“[..] 但很明显,同时运行 500 个函数和线程管理器,这就是并行性。”不,它们实际上并不是“同时”运行;其中一些或全部可能已经开始,但经理正在它们之间切换以推进它们,一次只推进一个。

“在一个核心还是多个核心?”只有一个。

查看

multiprocessing
了解实际的并行性,但不要假设并行执行会自动更快。在 CPU 上并行运行工作会产生大量开销,您的代码需要经过精心设计才能充分利用它。

© www.soinside.com 2019 - 2024. All rights reserved.