当前位置: 首页 > 面试题库 >

回调函数如何在多处理map_async中工作?

洪国兴
2023-03-14
问题内容

我花了一整夜的时间调试我的代码,终于找到了这个棘手的问题。请看下面的代码

from multiprocessing import Pool

def myfunc(x):
    return [i for i in range(x)]

pool=Pool()

A=[]
r = pool.map_async(myfunc, (1,2), callback=A.extend)
r.wait()

我以为我会得到A=[0,0,1],但输出是A=[[0],[0,1]]。这是没有意义的我,因为如果我有A=[]A.extend([0])A.extend([0,1])给我A=[0,0,1]。回调可能以不同的方式工作。所以我的问题是如何获得A=[0,0,1]而不是[[0],[0,1]]


问题答案:

[[0], [0, 1]]如果使用map_async,则使用结果()调用一次回调。

>>> from multiprocessing import Pool
>>> def myfunc(x):
...     return [i for i in range(x)]
... 
>>> A = []
>>> def mycallback(x):
...     print('mycallback is called with {}'.format(x))
...     A.extend(x)
... 
>>> pool=Pool()
>>> r = pool.map_async(myfunc, (1,2), callback=mycallback)
>>> r.wait()
mycallback is called with [[0], [0, 1]]
>>> print(A)
[[0], [0, 1]]

使用apply_async,如果你想被称为每次回调。

pool=Pool()
results = []
for x in (1,2):
    r = pool.apply_async(myfunc, (x,), callback=mycallback)
    results.append(r)
for r in results:
    r.wait()


 类似资料:
  • 问题内容: 和之间有什么区别?将列表中的项目分配到4个进程后,它们是否运行相同的功能? 那么,假设两者都在异步和并行运行是错误的吗? 问题答案: 将作业映射到流程有四种选择。您必须考虑多个参数,并发性,阻塞和排序。并且仅在阻止方面有所不同。是非阻塞其中作为阻止 假设您有一个功能 输出示例: 将等待所有10个这些函数调用完成,因此我们可以连续查看所有打印件。 将异步执行它们,只有块时被调用,所以我们

  • 我需要瞄准地图函数中的所有组件,但我只得到其中的最后一个组件。

  • 问题内容: 我试图用NodeJS编写代码,从外部API抓取数据,然后使用Mongoose在MongoDB中填充它们。在这之间,我将检查该特定对象是否已经存在于Mongo中。下面是我的代码。 我的问题是,由于NodeJS回调是并行的,因此不会按顺序调用它。我的最终结果将是这样的: 呼叫报告API console.log(长度)= 100 ^^^^^^^^^^^^^^^^^^^^^^^^^ conso

  • 问题内容: 伙计们。说,我有一个查询: 我用以下方式重写了它: 让我们将其视为消耗资源的一种。我认为,在第二个查询中,它的调用次数要少两次,但是在进行此更改后,我并没有发现任何显着的性能提升。 因此,我想我的假设是错误的。那么,Oracle实际如何处理这些函数调用? 问题答案: 这是一个非常好的问题。 我首先尝试创建表并插入示例数据(仅五行): 我制作了一个简单的测试包对此进行了测试。 和身体…

  • 我试图将studio流的某些部分迁移到,但不是全部,但似乎当我试图重定向回studio流时,Twilio会出现错误400或挂断呼叫。 我希望它能继续成功分支的工作室流,但电话被挂断了。我还尝试省略,但也没有更好。 当我输入无效的(如)时,我会得到错误400。 你们知道我错过了什么吗?

  • 本文向大家介绍理解javascript回调函数,包括了理解javascript回调函数的使用技巧和注意事项,需要的朋友参考一下 把函数作为参数传入到另一个函数中。这个函数就是所谓的回调函数 经常遇到这样一种情况,某个项目的A层和B层是由不同的人员协同完成.A层负责功能funA,B层负责funcB。当B层要用到某个模块的数据,于是他对A层人员说,我需要你们提供满足某种需求的数据,你给我提供一个接口。