多处理中出现类似错误。函数参数数量不匹配

2024-03-31

我找不到更好的方法来描述我面临的错误,但每次我尝试对循环调用实现多重处理时,似乎都会出现此错误。

我使用了 sklearn.externals.joblib 和 multiprocessing.Process 但错误相似但不同。

想要应用多重处理的原始循环,其中一次迭代在单线程/进程中执行

for dd in final_col_dates:
    idx1 = final_col_dates.tolist().index(dd)

    dataObj = GetPrevDataByDate(d1, a, dd, self.start_hour_of_day)
    data2 = dataObj.fit()

    dataObj = GetAppointmentControlsSchedule(data2, idx1, d, final_col_dates_mod, dd, self.DC, frgt_typ_filter)
    data3 = dataObj.fit()

    if idx1 > 0:
       data3['APPT_SCHD_ARVL_D_{}'.format(idx1)] = np.nan

    iter += 1

    days_out_vars.append(data3)

为了将上面的代码片段实现为多处理,我创建了一个方法,其中上面的代码除了for loop.

使用 Joblib,以下是我的代码片段。

Parallel(n_jobs=2)(
            delayed(self.ParallelLoopTest)(dd, final_col_dates, d1, a, d, final_col_dates_mod, iter, return_list)
                    for dd in final_col_dates)

变量返回列表是在方法 ParallelLoopTest 内执行的共享变量。它被声明为:

manager = Manager()
return_list = manager.list()

使用上面的代码片段,我遇到以下错误:

Process SpawnPoolWorker-3:
Traceback (most recent call last):
File "C:\Users\dkanhar\Anaconda3\lib\multiprocessing\process.py", line 249, in _bootstrap
  self.run()
File "C:\Users\dkanhar\Anaconda3\lib\multiprocessing\process.py", line 93, in run
  self._target(*self._args, **self._kwargs)
File "C:\Users\dkanhar\Anaconda3\lib\multiprocessing\pool.py", line 108, in worker
  task = get()
File "C:\Users\dkanhar\Anaconda3\lib\site-packages\sklearn\externals\joblib\pool.py", line 359, in get
  return recv()
File "C:\Users\dkanhar\Anaconda3\lib\multiprocessing\connection.py", line 251, in recv
  return ForkingPickler.loads(buf.getbuffer())
TypeError: function takes at most 0 arguments (1 given)

我还尝试了多处理模块来执行上述代码,但仍然遇到类似的错误。以下代码用于使用多处理模块运行:

for dd in final_col_dates:
    # multiprocessing.Pipe(False)
    p = multiprocessing.Process(target=self.ParallelLoopTest, args=(dd, final_col_dates, d1, a, d, final_col_dates_mod, iter, return_list))
    jobs.append(p)
    p.start()

for proc in jobs:
    proc.join()

而且,我面临以下错误回溯:

File "<string>", line 1, in <module>
File "C:\Users\dkanhar\Anaconda3\lib\multiprocessing\spawn.py", line 106, in spawn_main
   exitcode = _main(fd)
File "C:\Users\dkanhar\Anaconda3\lib\multiprocessing\spawn.py", line 116, in _main
   self = pickle.load(from_parent)
TypeError: function takes at most 0 arguments (1 given)
Traceback (most recent call last):
File "E:/Projects/Predictive Inbound Cartoon Estimation-MLO/Python/dataprep/DataPrep.py", line 457, in <module>
   print(obj.fit())
File "E:/Projects/Predictive Inbound Cartoon Estimation-MLO/Python/dataprep/DataPrep.py", line 39, in fit
return self.__driver__()
File "E:/Projects/Predictive Inbound Cartoon Estimation-MLO/Python/dataprep/DataPrep.py", line 52, in __driver__
   final = self.process_()
File "E:/Projects/Predictive Inbound Cartoon Estimation-MLO/Python/dataprep/DataPrep.py", line 135, in process_
   sch_dat = self.inline_apply_(all_dates_schd, d1, d2, a)
File "E:/Projects/Predictive Inbound Cartoon Estimation-MLO/Python/dataprep/DataPrep.py", line 297, in inline_apply_
   p.start()
File "C:\Users\dkanhar\Anaconda3\lib\multiprocessing\process.py", line 105, in start
   self._popen = self._Popen(self)
File "C:\Users\dkanhar\Anaconda3\lib\multiprocessing\context.py", line 212, in _Popen
   return _default_context.get_context().Process._Popen(process_obj)
File "C:\Users\dkanhar\Anaconda3\lib\multiprocessing\context.py", line 313, in _Popen
   return Popen(process_obj)
File "C:\Users\dkanhar\Anaconda3\lib\multiprocessing\popen_spawn_win32.py", line 66, in __init__
   reduction.dump(process_obj, to_child)
File "C:\Users\dkanhar\Anaconda3\lib\multiprocessing\reduction.py", line 59, in dump
   ForkingPickler(file, protocol).dump(obj)
   BrokenPipeError: [Errno 32] Broken pipe

所以,我尝试取消注释该行多处理.Pipe(False)认为这可能是因为使用了 Pipe,我禁用了它,但问题仍然存在,我面临同样的错误。

如果有任何帮助,以下是我的方法 ParallerLoopTest:

def ParallelLoopTest(self, dd, final_col_dates, d1, a, d, final_col_dates_mod, iter, days_out_vars):
    idx1 = final_col_dates.tolist().index(dd)

    dataObj = GetPrevDataByDate(d1, a, dd, self.start_hour_of_day)
    data2 = dataObj.fit()

    dataObj = GetAppointmentControlsSchedule(data2, idx1, d, final_col_dates_mod, dd, self.DC, frgt_typ_filter)
    data3 = dataObj.fit()

    if idx1 > 0:
        data3['APPT_SCHD_ARVL_D_{}'.format(idx1)] = np.nan

    print("Iter ", iter)
    iter += 1

    days_out_vars.append(data3)

我之所以说类似的错误是因为如果你查看这两个错误的 Traceback,它们之间都有类似的错误行:

类型错误:函数最多接受 0 个参数(给定 1 个)从 Pickle 加载时,我不知道为什么会发生这种情况。

另请注意,我之前已经在其他项目中成功实现了这两个模块,但从未遇到过问题,所以我不知道为什么这个问题现在开始出现,也不知道这个问题到底意味着什么。

任何帮助将不胜感激,因为三天以来我一直在浪费时间来调试它。

Thanks

在上次回答后编辑 1

回答后,我尝试了以下内容。 添加装饰器@静态方法,删除 self,并使用 DataPrep.ParallelLoopTest(args) 调用该方法。

另外,将该方法移出类 DataPrep,并通过 ParallelLoopTest(args) 简单地调用,

但在这两种情况下,错误仍然相同。

PS:我尝试在这两种情况下使用 joblib 。 因此,这两种解决方案都不起作用。

新方法定义:

def ParallelLoopTest(dd, final_col_dates, d1, a, d, final_col_dates_mod, iter, days_out_vars, DC, start_hour):
    idx1 = final_col_dates.tolist().index(dd)

    dataObj = GetPrevDataByDate(d1, a, dd, start_hour_of_day)
    data2 = dataObj.fit()

    dataObj = GetAppointmentControlsSchedule(data2, idx1, d, final_col_dates_mod, dd, DC, frgt_typ_filter)
    data3 = dataObj.fit()

    if idx1 > 0:
        data3['APPT_SCHD_ARVL_D_{}'.format(idx1)] = np.nan

    print("Iter ", iter)
    iter += 1

    days_out_vars.append(data3)

Edit 2:

我遇到了错误,因为 Python 无法腌制一些大型数据帧。我的参数/参数中有 2 个 DataFrame,其中一个大约 20MB,另外 200MB 采用 pickle 格式。但这不应该是一个问题吧?我们应该能够传递 Pandas DataFrame。如我错了请纠正我。

另外,解决方法是我在使用随机名称调用方法之前将 DataFrame 保存为 csv,传递文件名并读取 csv,但这是一个缓慢的过程,因为它涉及推理巨大的 csv 文件。有什么建议么?


实际上,在这两种情况下你都会得到完全相同的错误,但是当你使用Pool在一个例子中(joblib) and a Process在另一个中,您在主线程中不会得到相同的失败/回溯,因为它们不以相同的方式管理进程失败。
在这两种情况下,您的流程似乎无法在新的环境中解开您的子作业Process. The Pool在使用时给你返回 unpickling 错误Process,您会遇到失败,因为当子进程因该 unpickling 错误而终止时,它会关闭主线程用于写入数据的管道,从而导致主进程中出现错误。

我的第一个想法是,当您尝试腌制实例方法时会导致错误,而您应该尝试在此处使用静态方法(使用实例方法似乎不正确,因为对象不在进程之间共享)。
使用装饰器@staticmethod在你声明之前ParallelLoopTest并删除self争论。

编辑: 另一种可能性是其中一个论点dd, final_col_dates, d1, a, d, final_col_dates_mod, iter, return_list无法解封。显然,它来自panda.DataFrame.
我看不出在这种情况下解封失败的任何原因,但我不知道panda那好吧。
一种解决方法是将数据转储到临时文件中。你可以看看这个链接here http://matthewrocklin.com/blog/work/2015/03/16/Fast-Serialization用于高效序列化panda.DataFrame。另一种解决方案是使用DataFrame.to_pickle方法和panda.read_pickle将其转储到文件或从文件中检索它。

注意,比较一下会更好joblib.Parallel with multiprocessing.Pool并且不与multiprocessing.Process.

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

多处理中出现类似错误。函数参数数量不匹配 的相关文章

  • 比较 TCP 校验和与 Scapy?

    我试图在使用 Scapy 作为嗅探器时识别校验和不正确的数据包 我可以通过访问获得原始校验和 packet TCP chksum 然后我使用删除它 del packet TCP chksum 我想做类似的事情 if originalChec
  • 如何从字典构造defaultdict?

    如果我有d dict zip range 1 10 range 50 61 我怎样才能建立一个collections defaultdict出于dict 唯一的论点defaultdict似乎采取的是工厂功能 我必须初始化然后再经历原来的d并
  • 有没有办法使用 Mayavi 填充陀螺仪表面的一侧?

    我正在使用 Mayavi 绘制陀螺仪的等值面 我的问题是我需要通过填充两个生成区域的一侧来获得更坚固的结构 在下面的图片中 您可以看到我生成的等值面的外观以及填充一侧后的外观 我生成的等值面 它应该是什么样子 等值面可以通过以下方程生成 U
  • 无法从同一项目的 bin 目录导入模块

    我正在构建一个库 该库将通过 pip 包含在其他项目中 我有以下目录 venv 是 virtualenv project bin run py myproj init py logger py venv 我激活虚拟环境 在 bin run
  • Python - 重写 print()

    我正在使用 mod wsgi 想知道是否可以覆盖 print 命令 因为它没用 这样做是行不通的 print myPrintFunction 因为这是一个语法错误 Print 不是 Python 2 x 中的函数 因此这不能直接实现 但是
  • 将 unique_ptr 与 boost python 结合使用 - boost::shared_ptr 有效,但 unique_ptr 无效

    这可能与以下问题相同 Boost Python 没有 to python for std unique ptr https stackoverflow com questions 20590205 boost python no to py
  • 抓取多个帐户,即多次登录

    我可以成功抓取单个帐户的数据 我想在一个网站上抓取多个帐户 这意味着多次登录 如何管理登录 注销 您可以在每个帐户会话中使用多个 cookiejar 并行抓取多个帐户 请参阅 cookiejar 请求元密钥http doc scrapy o
  • 读取 JSON 文件并将其漂亮打印到另一个文件

    我有一个复杂 嵌套 的 json 文本文件 它是文本文件中的一长行 有什么方法可以读取文件 在 python 中 并将 json 缩进 漂亮地打印到新的文本文件中吗 使用读取文件json load 并使用json dump 在指定缩进值时将
  • 无法写入文本文件

    我正在运行一些测试并需要写入文件 当我运行测试时open file r 不写入文件 测试脚本如下 class GetDetailsIP TestGet def runTest self self category PTZ try This
  • 使用多索引列对多列求和

    我有一个从数据透视表创建的数据框 看起来类似于 import pandas as pd d company1 False Negative April 2012 112 0 April 2013 370 0 April 2014 499 0
  • Flask 无法识别两个 URL 参数

    我正在尝试将两个参数发送到使用 Flask 路由的 URL If I do curl i http 127 0 0 1 5000 api journeys count startStationName Hansard 20Mews 20Sh
  • 如何在这个可嵌套的 For 循环中实现 Robot Framework 风格的变量?

    我在 Robot Framework 中见过很多 嵌套 For 循环 主要是创建一个内部带有 For 循环的关键字 然后在另一个 For 循环中调用该关键字 我使用 Python 2 7 13 制作了一个可嵌套的 For 循环 但因为它主要
  • 将 csv 写入谷歌云存储

    我试图了解如何将多行 csv 文件写入谷歌云存储 我只是没有遵循文档 https googlecloudplatform github io google cloud python stable storage blobs html hig
  • 使用 Python 3.7+ 中的 wfastcgi 以及 Numpy、Pandas 等在 IIS 上部署 Python Flask 应用程序

    使用 wfastcgi 在 IIS 上部署 python 3 7 Flask 或 Dash 应用程序时 有许多很棒的教程可以让 hello work 程序正常运行 例如 https medium com bilalbayasut deplo
  • python 中打印变量和字符串

    好吧 我知道如何打印变量和字符串 但是我如何打印类似 我的字符串 card price 的内容 它是我的变量 我的意思是 这是我的代码 print I have and here I would like to print my varia
  • 随机数生成器每次仅返回一个数字

    Python 是否有一个随机数生成器 每次只返回一个随机整数next 函数被调用 数字不应该重复并且生成器应返回区间内的随机整数 1 1 000 000 这是独一无二的 我需要生成超过一百万个不同的数字 这听起来好像非常消耗内存 以防所有数
  • 如何按分层类别结构中的值对 pandas 中的数据框进行排序

    我有一个 pandas 数据框 pd DataFrame category Transport Transport Car Transport Train Household Household Utilities Household Ut
  • Python 装饰器只是语法糖? [复制]

    这个问题在这里已经有答案了 可能的重复 了解 Python 装饰器 https stackoverflow com questions 739654 understanding python decorators 我对使用 Python 装
  • 在 python 中使用 org.mpris.mediaplayer2.player PlaybackStatus 属性

    The 规格页 http specifications freedesktop org mpris spec latest Player Interface html summary对于这个特定的接口说 PlaybackStatus s P
  • 在 NodeJS 中处理长时间运行的进程?

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

随机推荐

  • 访问 PowerPoint 加载项中的幻灯片对象

    我正在构建 PowerPoint 加载项 需要访问幻灯片或幻灯片对象 甚至整个演示文稿 唉 我能看到的唯一方法就是打开一个newppt 文件 现在 我不得不求助于保存当前演示文稿并使用打包重新打开它来操作任何内容的黑客方法 更具体地说 我必
  • 如何从 powershell 调用带有参数的 exe?

    我需要在 powershell 脚本中调用可执行文件并希望等待其结果 对于这个exe 我需要提供一些包含在我的变量中的参数 但这不起作用 gs currentPath gs gs8 70 bin gswin32c exe outPdf ca
  • 为什么 Scipy 的 ndimage.map_coordinates 对于某些数组没有返回任何值或返回错误的结果?

    代码返回正确的值但并不总是返回值 在下面的代码中 python 返回正确的插值arr b但不是为了arr a 不过 我已经研究这个问题大约一天了 我真的不确定发生了什么 由于某种原因 对于 arr a twoD interpolate 不断
  • Python:有没有办法将一串数字分成每第三个数字?

    例如 如果我有一个字符串 a 123456789876567543 我可以有一个类似的列表 123 第456章 第789章 第876章 第567章 第543章 gt gt gt a 123456789 gt gt gt int a i i
  • Service Worker 创建的缓存存储在下线刷新页面后消失

    我正在尝试为我的网络应用程序实现离线功能 但离线时我遇到了一些奇怪的行为 这可能是我所缺少的 因为它在 Chrome 和 Firefox 中都可以重现 我将在下面描述什么示例应用程序 https github com mzenz vanis
  • 使用node.js crypto来验证签名

    我正在尝试使用 AWS lambda 来验证在 swift 中使用 sec256r1 创建的签名 消息 一些要签署的文本 也已使用 sha256 进行哈希处理 签名将采用 base64 格式 encoding MEYCIQCPfWhpzxM
  • 在谷歌云语音API中使用增强模型

    我正在尝试使用 Google Speech API 上的增强模型 例如 gcs uri gs mybucket averylongaudiofile ogg client speech SpeechClient audio types Re
  • 如何从 Spring MVC 应用程序使用 Alfresco“在线编辑”功能

    我目前正在研究 Alfresco 的 Sharepoint 功能 我安装了 Alfresco 3 4 并按照网络快速启动安装 http wiki alfresco com wiki Web Quick Start Installation
  • 用Java模拟触摸命令

    我想更改二进制文件的修改时间戳 这样做的最佳方法是什么 打开和关闭文件是一个不错的选择吗 我需要一个解决方案 其中时间戳的修改将在每个平台和 JVM 上更改 文件类有一个设置最后修改时间 http docs oracle com javas
  • 从哪里获取“sys/socket.h”头文件/源文件?

    我一直在尝试用 C Unix 风格编写服务器 但我被困在 Windows 机器上 我从 MinGW 开始 但它编译不正确 并告诉我它找不到 sys socket h 文件 当然 这是服务器正常工作所必需的 我去寻找它 我想某个地方说要安装
  • PHP 在单位数字之前预先添加前导零,动态 [重复]

    这个问题在这里已经有答案了 PHP 是否有一种快速 即时的方法来测试单个字符串 然后在前面添加前导零 Example year 11 month 4 stamp year add single zero if needed month Im
  • JQuery:更改 URL 参数而不重新加载?

    我有一个问题 在以下条件下是否可以通过 JQuery 更改 URL 相同的 URL 将在浏览器返回和重新加载时加载 更改参数时页面不会重新加载 如果你想阻止页面重新加载 你必须使用哈希 如果你想更改 URL 请尝试 jQuery param
  • 在 Intellij 中找不到日志记录路径

    我想设置我的日志记录路径 以便我可以看到跟踪文件中当前我正在这样做的跟踪 日志记录路径 c temp tracefile log 但我没有看到任何跟踪文件 那么任何人都可以建议这有什么问题吗 或者有没有其他方法可以获取痕迹 请建议 在您的中
  • 如何解决 prestashop 1.5 中从无 cookie 域提供静态内容的问题?

    我在 gtmetrix com 上测试我的网站 它向我显示以下错误 以改进我的网站 yslow scrore 提供来自无 cookie 域的静态内容 如何解决这个错误 您应该创建一些子域 例如 media1 example com medi
  • oh-my-zsh 不应用主题

    我刚刚设置zsh和 一起oh my zsh 但有一些我无法理解的奇怪行为 如果我重新启动终端 或 iTerm 2 两者的行为相同 则指定的主题 zshrc未加载 我需要去做source zshrc让它发生 如果我echo ZSH THEME
  • 如何使用 Struts2 禁用后退按钮

    我在用struts serve static true and struts serve static browserCache false 但后退按钮即使在注销后也能工作 当我单击后退按钮时 它将转到上一个屏幕 我该如何解决这个问题 S2
  • 如何使用 Perl 对 Gmail 进行身份验证?

    我已经安装了this http search cpan org mincus Mail Webmail Gmail 1 09 lib Mail Webmail Gmail pm模块来获取 Gmail 收件箱内的访问和控制 但是 当我尝试通过
  • Git:也移动历史记录中的文件

    是否可以使用 Git 工具将文件移动到新文件夹中 同时修改其完整历史记录 就好像文件从第一次添加时就一直存在在那里一样 我在将一些存储库合并在一起后想到了这一点 我将文件从多个存储库移动到一个 超级 存储库内的不同文件夹 但是合并的历史记录
  • Postman 中 GET 请求中的数组作为参数

    我必须在 GET 请求中发送 ids 数组作为参数 如何在 Postman 中测试它 用于 API 测试的 google chrome 扩展 场景是我有网址 www something com activity poi ids poi id
  • 多处理中出现类似错误。函数参数数量不匹配

    我找不到更好的方法来描述我面临的错误 但每次我尝试对循环调用实现多重处理时 似乎都会出现此错误 我使用了 sklearn externals joblib 和 multiprocessing Process 但错误相似但不同 想要应用多重处