当前位置: 首页 > 面试题库 >

Python 3中的多处理与多线程与异步

米迪
2023-03-14
问题内容

我发现在Python
3.4中,用于多处理/线程的库很少:多处理vs线程与asyncio。

但是我不知道使用哪个,或者是“推荐的”。他们做的是同一件事还是不同?如果是这样,则将哪一个用于什么?我想编写一个在计算机上使用多核的程序。但是我不知道我应该学习哪个图书馆。


问题答案:

它们旨在(略有)不同的目的和/或要求。CPython(典型的主线Python实现)仍然具有全局解释器锁,因此多线程应用程序(当今实现并行处理的标准方式)不是最佳选择。这就是为什么multiprocessing
可能
要优先于threading。但是并不是每个问题都可以有效地分解为[几乎独立的]部分,因此可能需要大量的进程间通信。这就是为什么在一般情况下multiprocessing可能不受欢迎的原因threading

asyncio(该技术不仅在Python中可用,其他语言和/或框架也有此技术,例如Boost.ASIO)是一种有效地处理来自许多同时源的大量I
/ O操作而无需执行并行代码的方法。 。因此,这仅是针对特定任务的解决方案(的确是一个不错的解决方案!),而不是通常用于并行处理的解决方案。



 类似资料:
  • 但我不知道该用哪一个或是“推荐的”。他们做的是相同的事情,还是不同?如果是,哪一个用于什么?我想写一个在我的计算机中使用多核的程序。但我不知道我应该去哪个图书馆。

  • 我有一个图像路径列表,我想在进程或线程之间划分,以便每个进程处理列表的某些部分。处理包括从磁盘加载图像,进行一些计算并返回结果。我正在使用Python 2.7 下面是我如何创建辅助进程 我所面临的问题是,当我在initializer函数中记录初始化时间时,我知道worker不是并行初始化的,而是每个worker都以5秒的间隔初始化,下面是供参考的日志 我尝试过使用将同时启动辅助线程 我知道Wind

  • 我有一个要求,我想在下面的场景中使用Spring批处理框架。 我有一个在交易日期列上分区的表。我想使用Spring批处理框架的阅读器、处理器和写入器来处理该表的记录。我想做的是根据交易日期创建单独的线程进行读取、写入和处理。假设有4个交易日期,那么我想为单独的交易日期创建4个单独的线程。在每个线程中,阅读器将从该交易日期的表中读取记录,在处理器中丰富记录,然后在写入器中发布/写入。 我是Sprin

  • 问题内容: 在效率和代码清晰性方面,决定使用线程或多处理时应遵循哪些良好准则? 问题答案: 线程和多处理之间的许多差异并不是真正针对Python的,某些差异特定于某个Python实现。 对于CPython,在以下情况下,我都将使用该模块: 由于性能原因,我需要同时使用多个内核。使用线程时,全局解释器锁(GIL)将阻止任何加速。(无论如何,有时在这种情况下您都可以避免使用线程,例如,当主要工作是在通

  • 启动并行处理最简单的方式就是在 Step 配置中加上一个TaskExecutor , 比如,作为 tasklet 的一个属性: <step id="loading"> <tasklet task-executor="taskExecutor">...</tasklet> </step> 上面的示例中, taskExecutor指向了另一个实现 TaskExecutor 接口的Bean. T

  • [1]“多线程和异步编程的区别”