- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用多处理pool.starmap
函数。我发现一个奇怪的问题。
from multiprocessing import Pool
p = multiprocessing.Pool()
NODE = [1,2,3,4];
PageRank = [0.25,0.25,0.25,0.25];
Destination = [[2,3,4],[3,4],[1,4],[2]];
Data = zip(NODE,PageRank,Destination)
因此,我使用 zip
函数创建一个数据集 Data
,它是一个列表,其中每个条目都是长度为 3 的元组。然后我调用该函数
p.starmap(MyFunction, zip(NODE,PageRank,Destination))
效果很好。
但是,当我输入时
p.starmap(MyFunction, Data))
它输出空列表[]
!!!!我真的不知道发生了什么事。我实际上只是将 zip(NODE,PageRank,Destination)
替换为 Data
,这应该是同一件事,对吧?
这是因为我使用 Jupyter 笔记本导致的吗?
最佳答案
此答案仅在以下情况下有效
在 Python 2 中,zip(...)
返回一个列表
;然而在 Python 3 中,它返回一个 zip
对象(这与您在帖子中所说的列表不同)。
zip 对象是一个迭代器,因此只能迭代一次。到达迭代器末尾后,任何再次迭代它的尝试都不会产生任何结果。例如,
>>> z = zip([1, 2], [3, 4])
>>> for x in z:
... x
...
(1, 3)
(2, 4)
>>> for x in z:
... x
...
>>> list(z)
[]
说到我的第二个要点,我怀疑您正在做一些看似无害的事情,例如在将 Data
作为参数传递给 之前打印
。如果是这种情况,您将耗尽迭代器,然后有效地告诉 Data
的所有元素>pool.starmappool.starmap
将 MyFunction
应用于绝对没有的内容。
要解决此问题,您有三个选择。
pool.starmap
的调用中创建 zip 对象。数据
传递给pool.starmap
之前,请勿循环遍历。Data = list(zip(NODE,PageRank,Destination))
)。那么它就是一个可迭代,您可以根据需要多次迭代它。以我的拙见,这个问题只是Python新手的一个成人仪式。如果它适用于您并且您想了解更多信息,您应该阅读迭代器和可迭代之间的差异,也许从 this SO post 开始.
关于python 多处理池.starmap 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57310809/
我有一个可以并行运行多个查询的函数,但是我在使用 multiprocessing 运行我的函数时遇到了一些麻烦。我有这段代码: def run(args): query, cursor = a
我在尝试使用 multiprocessing.Pool.starmap 时遇到了一个奇怪的错误。重现错误所需的最少代码在这里: from multiprocessing import Pool # I
最初,对于我使用的代码,Pool.map 足以对我的代码进行线程化,因为只有一个参数(一个可迭代的)作为参数传入我的函数。现在,我需要将多个参数传递给该函数,但我在使用 Pool.starmap 时遇
是否有类似于 pools.starmap 的函数可以与字典列表一起使用? 代替 :pools.starmap(func, iterable_of_tuple) 你将会拥有:pools.starmapd
我正在使用多处理pool.starmap函数。我发现一个奇怪的问题。 from multiprocessing import Pool p = multiprocessing.Pool() NODE
我正在尝试一些网页抓取。我正在将包含 URL 的列表传递给 pool.starmap ,但我遇到了参数错误。显示我的代码的简化版本: 有人可以帮我解决这个问题吗?对不起,如果我做了一些愚蠢的事情。 f
我有一个使用多处理库来计算一些东西的程序。大约有 10K 个输入需要计算,每个输入需要 0.2 秒到 10 秒的时间。 我当前的方法使用池: # Inputs signals = [list(s) f
这个starmap示例程序按预期工作: import multiprocessing def main(): pool = multiprocessing.Pool(10) param
假设我有这两种方法来完成相同的任务: from multiprocessing import Pool pool = Pool(4) def func(*args): # do some sl
关于 this post 的第二个答案, 我试过下面的代码 from multiprocessing import Pool import numpy as np from itertools imp
所以我创建了一个多处理列表(特别是 multiprocessing.Pool().starmap())并希望减少其内存大小。名单如下: import sys import numpy as np fr
在回答问题时Clunky calculation of differences between an incrementing set of numbers, is there a more beau
我正在使用 Pool 对我的程序进行多线程处理,使用 starmap 来传递参数。 我被卡住了,因为我似乎无法找到一种方法来传递 kwargs 以及我在 starmap 函数中传递的 zip 数组。
我是一名优秀的程序员,十分优秀!