Multiprocessing.pool 具有多个 args 和 kwargs 的函数

2024-02-23

我想使用 mutliprocessing.pool 方法并行计算。问题是我想在计算中使用的函数提供了两个参数和可选的 kwargs,第一个参数是数据帧,第二个参数是 str,任何 kwargs 是字典。

对于我尝试执行的所有计算,我想要使用的数据帧和字典都是相同的,只有第二个参数不断变化。因此,我希望能够使用 map 方法将其作为不同字符串的列表传递给带有 df 和 dict 的已打包函数。

from utils import *
import multiprocessing
from functools import partial



def sumifs(df, result_col, **kwargs):

    compare_cols = list(kwargs.keys())
    operators = {}
    for col in compare_cols:
        if type(kwargs[col]) == tuple:
            operators[col] = kwargs[col][0]
            kwargs[col] = list(kwargs[col][1])
        else:
            operators[col] = operator.eq
            kwargs[col] = list(kwargs[col])
    result = []
    cache = {}
    # Go through each value
    for i in range(len(kwargs[compare_cols[0]])):
        compare_values = [kwargs[col][i] for col in compare_cols]
        cache_key = ','.join([str(s) for s in compare_values])
        if (cache_key in cache):
            entry = cache[cache_key]
        else:
            df_copy = df.copy()
            for compare_col, compare_value in zip(compare_cols, compare_values):
                df_copy = df_copy.loc[operators[compare_col](df_copy[compare_col], compare_value)]
            entry = df_copy[result_col].sum()
            cache[cache_key] = entry
        result.append(entry)
    return pd.Series(result)

if __name__ == '__main__':

    ca = read_in_table('Tab1')
    total_consumer_ids = len(ca)

    base = pd.DataFrame()
    base['ID'] = range(1, total_consumer_ids + 1)


    result_col= ['A', 'B', 'C']
    keywords = {'Z': base['Consumer archetype ID']}

    max_number_processes = multiprocessing.cpu_count()
    with multiprocessing.Pool(processes=max_number_processes) as pool:
        results = pool.map(partial(sumifs, a=ca, kwargs=keywords), result_col)
    print(results)

但是,当我运行上面的代码时,出现以下错误:TypeError: sumifs() missing 1 required positional argument: 'result_col'。如何为函数提供第一个 arg 和 kwargs,同时提供第二个参数作为 str 列表,以便我可以并行计算?我在论坛上读过几个类似的问题,但似乎没有一个解决方案适用于这种情况......

谢谢您,如果有不清楚的地方,我深表歉意,我今天刚刚了解到多处理包!


让我们看一下代码的两部分。

首先是sumifs函数声明:

def sumifs(df, result_col, **kwargs):

其次,调用该函数时带上相关参数。

# Those are the params
ca = read_in_table('Tab1')
keywords = {'Z': base['Consumer archetype ID']}

# This is the function call
results = pool.map(partial(sumifs, a=ca, kwargs=keywords), tasks)

更新1:

编辑原始代码后。看起来问题是位置参数分配,尝试丢弃它。

替换行:

results = pool.map(partial(sumifs, a=ca, kwargs=keywords), result_col)

with:

results = pool.map(partial(sumifs, ca, **keywords), result_col)

示例代码:

import multiprocessing
from functools import partial

def test_func(arg1, arg2, **kwargs):
    print(arg1)
    print(arg2)
    print(kwargs)
    return arg2

if __name__ == '__main__':
    list_of_args2 = [1, 2, 3]
    just_a_dict = {'key1': 'Some value'}
    with multiprocessing.Pool(processes=3) as pool:
        results = pool.map(partial(test_func, 'This is arg1', **just_a_dict), list_of_args2)
    print(results)

将输出:

This is arg1
1
{'key1': 'Some value'}
This is arg1
2
{'key1': 'Some value'}
This is arg1
2
{'key1': 'Some value'}
['1', '2', '3']

有关如何操作的更多示例Multiprocessing.pool 具有多个 args 和 kwargs 的函数 https://stackoverflow.com/questions/59756754/multiprocessing-pool-with-a-function-that-has-multiple-args-and-kwargs/59775559?noredirect=1#comment105779457_59775559


更新2:

扩展示例(由于评论):

然而,我想知道,以同样的方式,如果我的函数有三个 args 和 kwargs,并且我想保持 arg1、arg3 和 kwargs 恒定,我如何将 arg2 作为多处理列表传递?本质上,我将如何指示映射(partial(test_func,'这是arg1','这将是arg3',** just_a_dict),arg2)的多重处理,partial中的第二个值对应于arg3而不是arg2?

The Update 1代码将更改如下:

# The function signature
def test_func(arg1, arg2, arg3, **kwargs):

# The map call
pool.map(partial(test_func, 'This is arg1', arg3='This is arg3', **just_a_dict), list_of_args2)

这可以使用 python 来完成位置和关键字分配。 请注意,kwargs被放在一边并且没有使用 a 进行分配keyword尽管事实上它位于keyword指定值。

有关参数分配差异的更多信息可以找到here https://stackoverflow.com/questions/9450656/positional-argument-v-s-keyword-argument.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Multiprocessing.pool 具有多个 args 和 kwargs 的函数 的相关文章

  • Flask中使用的路由装饰器是如何工作的

    我熟悉 Python 装饰器的基础知识 但是我不明白这个用于 Flask 路由的特定装饰器是如何工作的 以下是 Flask 网站上的代码片段 from flask import Flask escape request app Flask
  • LibreOffice 并行将 .docx 转换为 .pdf 效果不佳

    我有很多 docx 文件需要转换为 pdf 将它们一一转换需要很长时间 所以我编写了一个 python 脚本来并行转换它们 from subprocess import Popen import time import os os chdi
  • Tkinter 菜单删除项

    如何删除任何菜单项 例如我想删除 播放 self menubar Menu self root self root config menu self menubar self filemenu2 Menu self menubar self
  • python array(10,1) 和 array(10,) 之间的区别

    我正在尝试将 MNIST 数据集加载到数组中 当我使用 X train y train X test y test mnist load data 我得到一个数组 y test 10000 但我希望它的形状为 10000 1 数组 1000
  • 是否有一个包可以维护所有带有符号的货币列表?

    是否有一个 python 包提供所有 或相当完整 货币的列表与符号 如美元的 有优秀的pycountry 贪财的 https github com limist py moneyed and ccy http code google com
  • 如何将 sql 数据输出到 QCalendarWidget

    我希望能够在日历小部件上突出显示 SQL 数据库中的一天 就像启动程序时突出显示当前日期一样 在我的示例中 它是红色突出显示 我想要发生的是 当用户按下突出显示的日期时 数据库中日期旁边的文本将显示在日历下方的标签上 这是我使用 QT De
  • OpenCV 跟踪器:模型未在函数 init 中初始化

    在视频的第一帧 我运行一个对象检测器 它返回对象的边界框 如下所示
  • 如何使用 Homebrew 在 Mac 上安装 Python 2 和 3?

    我需要能够在 Python 2 和 3 之间来回切换 我如何使用 Homebrew 来做到这一点 因为我不想弄乱路径并陷入麻烦 现在我已经通过 Homebrew 安装了 2 7 我会用pyenv https github com yyuu
  • 在 Mac OS X 上安装 libxml2 时出现问题

    我正在尝试在我的 Mac 操作系统 10 6 4 上安装 libxml2 我实际上正在尝试在 Python 中运行 Scrapy 脚本 这需要我安装 Twisted Zope 现在还需要安装 libxml2 我已经下载了最新版本 2 7 7
  • Jupyter 笔记本中未显示绘图图表

    我已经尝试解决这个问题几个小时了 我按照上面的步骤操作情节网站 https plot ly python getting started start plotting online并且图表仍然没有显示在笔记本中 这是我的情节代码 color
  • PIL.Image.open和tf.image.decode_jpeg返回值的区别

    我使用 PIL Image open 和 tf image decode jpeg 将图像文件解析为数组 但发现PIL Image open 中的像素值与tf image decode jpeg不一样 为什么会出现这种情况 Thanks 代
  • NumPy 相当于 Keras 函数 utils.to_categorical

    我有一个使用 Keras 进行机器学习的 Python 脚本 我正在构建 X 和 Y 它们分别是特征和标签 标签的构建方式如下 def main depth 10 nclass 101 skip True output True video
  • Flask 应用程序路由中的多个参数

    烧瓶怎么写app route如果我在 URL 调用中有多个参数 这是我从 AJax 调用的 URL http 0 0 0 0 8888 createcm summary VVV change Feauure 我试图写我的烧瓶app rout
  • 如何从列表类别中对 pandas 数据框进行排序?

    所以我在下面有这个数据集 我想根据我的列表从 名称 列进行排序 以及按 A 升序和按 B 降序排序 import pandas as pd import numpy as np df1 pd DataFrame from items A 1
  • Discord.py 嵌入中禁用按钮/冻结按钮

    I m trying to make a replica of this bot in which when I press any of the buttons below it shows a dropdown menu and you
  • 在 numpy 中连接维度

    我有x 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 2 3 I want 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 6 也就是说 我想连接中间维度的所有项目 在这种特殊情况下我可以得到这
  • 将时间添加到日期时间

    我有一个像这样的日期字符串 然后使用strptime 所以就像这样 my time datetime datetime strptime 07 05 15 m d Y 现在我想添加 23 小时 59 分钟my time 我努力了 timed
  • Jupyter Notebook:带有小部件的交互式绘图

    我正在尝试生成一个依赖于小部件的交互式绘图 我遇到的问题是 当我使用滑块更改参数时 会在前一个绘图之后完成一个新绘图 而我预计只有一个绘图会根据参数发生变化 Example from ipywidgets import interact i
  • 如何使用xlwt设置文本颜色

    我无法找到有关如何设置文本颜色的文档 在 xlwt 中如何完成以下操作 style xlwt XFStyle bold font xlwt Font font bold True style font font background col
  • 使用 paramiko 运行 Sudo 命令

    我正在尝试执行sudo使用 python paramiko 在远程计算机上运行命令 我尝试了这段代码 import paramiko ssh paramiko SSHClient ssh set missing host key polic

随机推荐

  • Eigen static libaligned_free“双重释放或损坏”

    这是一个延续较早的帖子 https stackoverflow com questions 70788173 eigen static lib memory align 但这一次希望有一个更好的例子 设置向量时 这个简单的测试会崩溃 我正在
  • 使用 DotNetZip 库解压包含非 ASCII 字符的文件

    我正在尝试使用 DotNetZip 库解压缩文件 该文件包含带有丹麦语字符 的文件夹和文件 TotalCommander 7Zip Windows 自己的 zip 都能正确提取文件 但 DotNetZip Library 会破坏丹麦语字符
  • MVC4 FoolProof 数据注释 - 如何检查该字段不等于零?

    我正在尝试使用 MVC Foolproof 库来验证我的模型并分别显示错误消息 但是 当我使用万无一失的验证时 单击提交按钮时 即使常规验证也不会显示 我的要求是我有一个数字文本框 它不应该为空或零 文本框值是根据从前面的下拉列表中选择的值
  • 如何将变量从控制器传递到视图 joomla mvc

    根据此示例 如何将变量从 joomla 子控制器传递到视图 class MYControllerControllerParser extends JController public function construct default a
  • 如何仅序列化.Net 中的某些属性?

    这是一个 Web 项目 所以我有几个继承自 Web UI 的类 我只想序列化非常特殊的属性 基本上 只有本地属性 我知道 XMLIgnore 属性可以放置在属性上以忽略项目 但这在我的上下文中不起作用 因为这需要修改一堆我真的不想修改的东西
  • 使用 Woocommerce 中的元查询从任何地方排除特定产品

    我想从我的商店页面以及我的主页中排除来自给定城市的产品 在主页中我显示来自 flatsome UX Builder 的 woocommerce 商店小部件 不确定它是一个小部件 的产品 给定城市的产品不会出现在我的商店页面中 但它们仍然出现
  • 如何在 Flutter 中将数据从子 Stateful widget 传递到 Parent Widget

    我的 flutter 应用程序中有一个有状态的小部件 DayPicker 相同的代码是 class DayPicker extends StatefulWidget override DayPickerState createState g
  • 分布式 ASP.Net 状态服务

    我想知道是否存在任何分布式 ASP Net State Service 替代方案 Session 可以存储在 InProc StateService 或 SQL 中 您还可以编写自定义存储提供程序 对于负载平衡 没有任何形式的粘性 IP 只
  • json 模式中的对象重用和组合

    我有一个 json blob 看起来像这样 ObjectA Object1 fields Object2 fields Object3 fields ObjectB Object1 fields Object2 fields Object3
  • srand (time (null)) 导致编译器警告:隐式转换丢失整数精度

    如果这个问题已经得到解答 我们深表歉意 include
  • ASP.net Bin目录-dll加载

    我需要在我的 asp net 应用程序中使用 dll 如何加载不是来自 bin 目录的 dll 也许我应该提到该应用程序是 asp 代码和 asp net 代码的混合体 所以 当我在我的机器上开发它时 我在 bin 目录中放置了一个 dll
  • 将 JSX 转换为 JSON 或 String,然后再转换回来

    我想将 React 组件的状态保存在数据库中 Json stringify myComponent 但是 当我尝试通过 JSON parse 再次使用该组件时 我得到了 Error Objects are not valid as a Re
  • 如何更改 Mac 上的 JAR 图标?

    我的 Mac 上有一个名为 Test jar 的 JAR 文件 当我单击它时 该文件运行得非常好 它所做的只是打开一个小窗口 并显示 Test 所以它是一个简单的应用程序 我是 Java 编程新手 我的问题是如何将 jar 文件的图标更改为
  • C# 二进制常量表示

    我真的被这个难住了 在C 中 有如下的十六进制常量表示格式 int a 0xAF2323F5 有二进制常量表示格式吗 不 C 中没有二进制文字 您当然可以使用 Convert ToInt32 解析二进制格式的字符串 但我认为这不是一个很好的
  • 如何在 Python 中将*所有*字符转义为相应的 html 实体名称和数字?

    我想将字符串编码为其相应的 html 实体 但不幸的是我无法做到 正如我在问题标题中所说 我想要all字符串中的字符将被转换为相应的 html 实体 数字和名称 所以根据文档 https docs python org 3 library
  • 如何在 firestore 文档 ID 的位置添加用户 UID

    我正在尝试获取用户 UID 来代替 Firebase Firestore 中自动生成的文档 ID 但由于此错误而无法获取它 类型错误 firebase auth currentUser 为 null 这是我的 index js 文件 Fir
  • Python请求访问OAUTH网站内容 - SNL财经

    我一直在用头撞墙 试图从新闻来源 SNL 财经 检索内容 我拥有有效的凭据 因此理论上我应该能够以编程方式访问他们的新闻内容 简而言之 我尝试执行以下脚本但没有成功 s requests Session client id client s
  • 谷歌地图 API v3 的服务器端集群

    我目前正在开发一种谷歌地图概述小部件 它将位置显示为地图上的标记 标记的数量从数百个到数千个 10000 个以上 不等 现在我正在使用谷歌地图的 MarkerClusterer v3 1 0和谷歌地图 javascript api v3 高
  • 如何给JTextField添加背景图片?

    我知道如何向 JPanel 添加背景图像 创建扩展 JPanel 的 ImagePanel 类并重载它的 PaintComponent 方法 但是 JTextField 的这个技巧无法正常工作 显示图像 但不显示文本 那么 如何正确地向 J
  • Multiprocessing.pool 具有多个 args 和 kwargs 的函数

    我想使用 mutliprocessing pool 方法并行计算 问题是我想在计算中使用的函数提供了两个参数和可选的 kwargs 第一个参数是数据帧 第二个参数是 str 任何 kwargs 是字典 对于我尝试执行的所有计算 我想要使用的