【问题标题】:Why is multiprocessing.apply_async unpacking a string as arguments?为什么 multiprocessing.apply_async 将字符串解包为参数?
【发布时间】:2021-06-10 03:30:00
【问题描述】:

我试图做一些多处理。

import multiprocessing

with multiprocessing.Pool() as pool:
  pool.apply_async(func,('some string'))

我收到一个错误:

TypeError: func() 接受 1 个位置参数,但给出了 261 个

这很可疑,因为我用作参数的字符串有 260 个字符。

有谁知道为什么会发生这种情况以及如何解决?

【问题讨论】:

  • ('some string') 替换为('some string',)。前者使用字符串,后者使用字符串元组。
  • 你会把它写成 aswer 吗

标签: python python-multiprocessing


【解决方案1】:

根据Python docs(强调我的!),

一个特殊的问题是包含 0 或 1 项的元组的构造:语法有一些额外的怪癖来适应这些。空元组由一对空括号构成; 一个包含一个项目的元组是通过一个带逗号的值来构造的(将单个值括在括号中是不够的)。丑陋,但有效。

所以,表达式('a') 实际上是在创建一个值为'a' 的字符串,但表达式('a',) 是在创建一个由单个字符串元素'a' 组成的元组。

也就是说,您可以将代码重构为

import multiprocessing

with multiprocessing.Pool() as pool:
  pool.apply_async(func, ('some string',))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 2013-06-29
    相关资源
    最近更新 更多