并行处理的ThreadPool和Pool

2024-04-26

有没有办法在 python 中同时使用 ThreadPool 和 Pool 来通过指定您希望使用的 CPU 和内核的数量来并行循环?

例如,我将循环执行为:

from multiprocessing.dummy import Pool as ThreadPool 
from tqdm import tqdm
import numpy as np

def my_function(x):
    return x + 1

pool = ThreadPool(4)
my_array = np.arange(0,1e6,1)


results = list(tqdm(pool.imap(my_function, my_array),total=len(my_array)))

对于 4 核,但我也想将它们分布在多个 CPU 上,是否有一种简单的方法来调整代码?


您对核心和 CPU 感到困惑。一般来说,出于所有目的,两者都被认为是相同的(从现在起我们称它们为处理器)。

在Python中创建线程池时,由于Python中的全局解释器锁(GIL),线程是用户级线程并且在同一处理器上运行。因为一次只有一个线程可以控制Python解释器。因此,使用(python)线程,我们在数据密集型任务中无法获得任何真正的并发性。

怎么解决这个问题呢?简单的。生成在不同处理器上运行的多个 python 进程(每个进程都有自己的解释器)。这是使用 multiprocessing(mp) 模块的地方,从调用它的父 python 进程中生成多个进程。

您可以通过运行 htop(在 linux、mac 上)并分析 python 进程的数量来验证这一点。对于 mp 模块,它们都将与调用 pool.map 函数的父脚本具有相同的名称。

  • 8 核 Mac 上的代码耗时:39.7 秒
  • 此代码在同一台机器上的时间:2.9s(注意我最多可以使用 8 个核心,但出于比较目的仅使用 4 个)

下面是修改后的代码:

from multiprocessing.dummy import Pool as ThreadPool 
from tqdm import tqdm
import numpy as np
import time
import multiprocessing as mp

def my_function(x):
    return x + 1

pool = ThreadPool(4)
my_array = np.arange(0,1e6,1)


t1 = time.time()
# results = list(tqdm(pool.imap(my_function, my_array),total=len(my_array)))
pool = mp.Pool(processes=4) # Generally, set to 2*num_cores you have
res = pool.map(my_function, my_array)
print("Time taken = ", time.time() - t1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

并行处理的ThreadPool和Pool 的相关文章

  • Python数据框将列表列分解为多行[重复]

    这个问题在这里已经有答案了 我有一个像这样的数据框 desc id info a b c 2 type u v w 18 tail 三列 desc id info desc 是一个列表 我想要这个 des id info a 2 type
  • winpdb 不适用于 python 3.3

    我无法让 rpdb2 与 python 3 3 一起运行 但根据多个来源 这应该是可能的 rpdb2 d myscript py A password should be set to secure debugger client serv
  • 通过pip安装lxml时出错:需要Microsoft Visual C++ 14.0

    我使用的是 Windows 10 机器 最近从 python 2 7 迁移到 3 5 当尝试通过 pip 安装 lxml 时 它会停止并抛出此错误消息 构建 lxml etree 扩展错误 需要 Microsoft Visual C 14
  • 在Python子目录中创建文件?

    在我的 Python 脚本中 我需要在子目录中创建一个新文件而不更改目录 并且需要从当前目录不断编辑该文件 My code os mkdir datetime dst for ip in open list txt with open ip
  • C# - 如何检测 SQLite DB 是否被锁定?

    我正在开发一个使用 SQLite 的多线程 C 程序 我遇到一个问题 有时运行 SQLiteCommand ExecuteNonQuery 来更新某些行会抱怨 SQLite 错误 5 数据库已锁定 我知道发生这种情况是因为数据库在插入或更新
  • LegacyUnhandledExceptionPolicy 不允许捕获(并吞下)ThreadAbortException?

    我正在使用 NET 1 1 兼容模式来处理未处理的异常 问题是 当 LegacyUnhandledExceptionPolicy 设置为 1 这就是我想要的 时 我无法捕获并吞下 ThreadAbortException 示例代码 应用程序
  • Bokeh 相当于 matplotlib 子图

    我正在寻找一种方法来创建包含多个子图的绘图 例如 fig ax0 ax1 plt subplots nrows 2 sharex True 可以在 matplotlib 中完成 然后可以通过以下方式解决ax0 and ax1 有没有办法在
  • 使用数据库数据模型生成 SQLAlchemy 模型、架构和 JSON 响应

    将 Flask 和 SQLAlchemy 用于 Python Web 应用程序 我的目标是创建一个系统 在其中我可以 从现有 PostgreSQL 数据库导入数据模型 并将它们映射到相应 SQLAlchemy 模型中的字段 使用这些 SQL
  • 是否可以将 SpaCy 安装到 Raspberry Pi 4 Raspbian Buster

    我一整天都在安装 SpaCy sudo pip install U spacy Looking in indexes https pypi org simple https www piwheels org simple Collectin
  • python 中打印变量和字符串

    好吧 我知道如何打印变量和字符串 但是我如何打印类似 我的字符串 card price 的内容 它是我的变量 我的意思是 这是我的代码 print I have and here I would like to print my varia
  • Control.Invoke 在隐藏的 ShowDialog 中“卡住”

    我有解决这个问题的方法 但这不是我第一次被咬 所以我试图确切地了解发生了什么 从我的申请中 我ShowDialog表单 表单上有一个按钮 单击该按钮时会调用另一个 非 GUI 线程上的代码 非 GUI 线程发回状态 Pushed then
  • matplotlib 轴标签偏移量的因素和变化

    在 matplotlib 中的轴刻度标签上 有两种可能的偏移量 factors and shifts 在右下角 1e 8 是一个 因子 1 441249698e1 是一个 移位 这里有很多答案展示了如何操纵两个都 matplotlib 将轴
  • 单个函数的 Numpy 均值和方差?

    使用 Numpy Python 是否可以从单个函数调用返回均值 AND 方差 我知道我可以单独做它们 但是计算样本标准差需要平均值 因此 如果我使用单独的函数来获取均值和方差 则会增加不必要的开销 我尝试在这里查看 numpy 文档 htt
  • 返回 OSError 异常类的子类实例的逻辑在哪里?

    我一直在寻找一些对某些人来说可能相对愚蠢的东西 但对我来说非常有趣 输入和输出错误已合并为OSError在 Python 3 3 中 异常类层次结构发生了变化 关于内置类的一个有趣的特性OSError是这样 它在传递时返回它的子类errno
  • 第 100 次避免循环导入

    Summary 我继续有一个ImportError在一个复杂的项目中 我已经将其蒸馏到仍然会出现错误的最低限度 Example 巫师有装有绿色和棕色药水的容器 这些可以添加在一起 产生同样是绿色或棕色的新药水 我们有一个PotionABC
  • 在 python 中将数组作为参数传递

    我是Python新手 现在我需要声明大小为 20 的数组并将该数组传递给函数 需要数组的函数如下 function args The args是一个输入function 谁能帮我 如何在 python 中传递数组 当你说 数组 时 我假设你
  • 设置restrict_xpaths设置后出现UnicodeEncodeError

    我是 python 和 scrapy 的新手 将restrict xpaths 设置设置为 table class lista 后 我收到了以下回溯 奇怪的是 通过使用其他 xpath 规则 爬虫可以正常工作 Traceback most
  • 在 python 中使用 org.mpris.mediaplayer2.player PlaybackStatus 属性

    The 规格页 http specifications freedesktop org mpris spec latest Player Interface html summary对于这个特定的接口说 PlaybackStatus s P
  • OpenMP 线程映射到物理内核

    于是我在网上查了一段时间没有结果 我是 OpenMP 的新手 所以不确定这里的术语 但是有没有办法从 OMPThread 由 omp get thread num 给出 和线程将运行的物理核心找出特定机器的映射 我还对 OMP 分配线程的精
  • 在 NodeJS 中处理长时间运行的进程?

    我看过一些较旧的帖子涉及这个主题 但我想知道当前的现代方法是什么 用例是 1 假设您想要在视频文件上执行长时间运行的任务 例如 60 秒长 例如jspm install这最多可能需要 60 秒 2 不能对任务进行细分 其他要求包括 需要知道

随机推荐

  • URL 扩展隐藏:重写与重定向

    我已经阅读了很多问题和答案 但我无法决定哪一个更好或如何使用这些扩展隐藏方式的组合 我想要的是就是有一个像这样的url重写堆栈溢出 那么我还应该做什么才能遵守这些规则 url example com file anyEXT show con
  • 从哪里可以获得 Microsoft.DirectX.dll?

    我不知道从哪里得到它 只是微软的 SDK 吗 如果是 如何将其添加到我的项目 Visual Studios 2010 C 中 托管 DirectX 包装器已过时 不再包含在 DirectX SDK 中 最后一个版本是 2010 年 2 月发
  • null对象的hashcode是如何计算的

    由于 HashMap 和 HashSet 允许空对象 那么这些 空 对象的哈希值是多少 java中如何计算 处理它 openJDK 内置的 HashMap 只是将空引用放入数组中用于保存条目的第一个存储桶中 409 private V pu
  • java中引用和对象有什么区别? [复制]

    这个问题在这里已经有答案了 我有类 GUI 所以我可以创建这样的对象 GUI g1 new GUI 和一个像这样的引用变量 GUI g2 现在据我所知 g2 是一个引用变量 它引用 GUI 类 而 g1 是 GUI 类的对象 g1和g2有什
  • 用户名作为路径

    我希望将用户名作为 URL 的一部分 例如mysite com 用户名 这应该重定向到用户配置文件 我用简介2 http drupal org project profile2 and Pathauto http drupal org pr
  • 未选中选项卡下划线的 TabLayout 颜色

    在此图中 在选项卡布局中 选定的选项卡栏下划线颜色为紫色 并且文本 我搜索未选择的标签栏 但找不到未选择的标签栏下划线 我想在选择某个选项卡时更改颜色 更改未选择的选项卡下划线颜色 如果你知道这件事 你会帮助我吗 在drawable文件夹中
  • React Hook“useState”在函数“setResults”中调用,该函数既不是 React 函数组件,也不是自定义 React Hook 函数

    我试图在一个功能组件中进行 API 调用 该组件是一个反应钩子 并根据结果重新渲染组件的内容 这是代码 调用 API 的组件 function IntegrationDownshift render
  • Delphi:MDI应用程序中的最大化子窗体

    如何最大化仅适合客户区而不适合整个父窗口的子窗口 我不希望子窗口在父窗口的主菜单或其他控件下消失 我有这个代码 procedure WMSIZE var Msg TMessage message WM SIZE procedure TFor
  • 使用记忆化与不使用记忆化的递归

    我在学校做的作业是用递归计算加泰罗尼亚数 第一个没有记忆 def catalan rec n res 0 if n 0 return 1 else for i in range n res catalan rec i catalan rec
  • 如何链接到grafana表中的外部站点

    如何创建包含外部站点超链接的单元格列 我可以嵌入文本并通过数据源传递它 不幸的是 grafana 不会将纯文本转换为超链接 例如 我可以使用以下文本创建一个单元格 https www google com search q hot dogs
  • 未捕获错误:INVALID_STATE_ERR:带有 webkitEnterFullScreen 的 DOM 异常 11

    document ready function var url video mp4 var video document createElement video video attr width 300 video attr height
  • 某些操作不会调用自定义 ContactsDirectoryProvider

    我已经实现了自定义 ContactsDirectoryProvider 当联系人或拨号器应用程序使用以下形式的 URI 搜索联系人时 它可以正常工作内容 com android contacts data phones filter 但是
  • Camel Rest URI 使用后缀

    所以我有一个使用 Camel 的 REST Web 服务 它工作得很好 只是如果我用后缀调用我的 URI 我会得到相同的响应 而不是 404 休息配置 restConfiguration component restlet bindingM
  • npm install 不起作用(没有错误),但 npm install 起作用

    关于 Node 和 npm 的菜鸟问题 我有一个 package json 文件 其中包含我想要使用 npm install 进行安装的依赖项列表 当我运行命令时 没有任何反应 我什至没有收到错误 什么也没有 但如果我尝试从列表中安装单个包
  • 如何避免org.springframework.transaction.UnexpectedRollbackException?

    当一个方法被 Transactional注解并且出现运行时异常时 spring会吃掉该异常并抛出 org springframework transaction UnexpectedRollbackException Transaction
  • 选择 data.table 中的列子集

    我想打印数据表的所有列dt除了其中一位名叫V3但不想通过数字而是通过名称来引用它 这是我的代码 dt data table matrix sample c 0 1 5 rep T 50 10 dt 3 with FALSE Is this
  • 有没有原生 DLL 导出函数查看器? [复制]

    这个问题在这里已经有答案了 是否有免费的本机 Windows DLL 导出函数查看器 它显示函数名称及其参数列表 dumpbin从 Visual Studio 命令提示符处 dumpbin exports csp dll 输出示例 Micr
  • 删除在网格 ExtJS 4 中选择特定行的功能

    我必须删除在网格中选择某些行的功能 我使用复选框模型 selModel Ext create Ext selection CheckboxModel mode SIMPLE 要禁用选择 我使用 beforeselect 事件 befores
  • 如何区分 git 分支名称和提交哈希?

    我有一个 bash 脚本 它接受分支名称 例如 master 或 feature foo 或提交哈希 例如 1234abcd 的字符串 我已签出存储库 因此我可以调用 git 确定字符串是分支名称还是提交哈希的最佳方法是什么 bin bas
  • 并行处理的ThreadPool和Pool

    有没有办法在 python 中同时使用 ThreadPool 和 Pool 来通过指定您希望使用的 CPU 和内核的数量来并行循环 例如 我将循环执行为 from multiprocessing dummy import Pool as T