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

计算多处理中执行的任务总数执行期间的池

长孙鸿振
2023-03-14
问题内容

我很想说明我们目前的谈话。我正在耕作,想知道目前的进展。因此,如果我将100作业发送给10处理器,那么如何显示当前返回的作业数量是多少。我可以获取ID,但是如何从我的地图函数中计算完成的返回作业的数量。

我正在按以下方式调用我的函数:

op_list = pool.map(PPMDR_star, list(varg))

在我的函数中,我可以打印当前名称

current = multiprocessing.current_process()
print 'Running: ', current.name, current._identity

问题答案:

如果使用pool.map_async,则可以将此信息从MapResult返回的实例中拉出。例如:

import multiprocessing
import time

def worker(i):
    time.sleep(i)
    return i


if __name__ == "__main__":
    pool = multiprocessing.Pool()
    result = pool.map_async(worker, range(15))
    while not result.ready():
        print("num left: {}".format(result._number_left))
        time.sleep(1)
    real_result = result.get()
    pool.close()
    pool.join()

输出:

num left: 15
num left: 14
num left: 13
num left: 12
num left: 11
num left: 10
num left: 9
num left: 9
num left: 8
num left: 8
num left: 7
num left: 7
num left: 6
num left: 6
num left: 6
num left: 5
num left: 5
num left: 5
num left: 4
num left: 4
num left: 4
num left: 3
num left: 3
num left: 3
num left: 2
num left: 2
num left: 2
num left: 2
num left: 1
num left: 1
num left: 1
num left: 1

multiprocessing在内部将传递给它的可迭代项map分成多个块,并将每个块传递给子进程。因此,该_number_left属性实际上会跟踪剩余

的数量,而不是可迭代对象中的各个元素。如果在使用大型可迭代项时看到奇数,请记住这一点。它采用分块,以提高IPC性能,但如果看到完成结果的准确理货是你比增加的性能更重要的是,你可以使用chunksize=1关键字argumment来map_async作出_num_left更准确。(chunksize通常只对非常大的可迭代对象产生明显的性能差异。请自己尝试一下,以查看它对用例是否真的很重要)。

正如您在评论中提到的那样,由于pool.map被阻塞,除非您要启动一个后台线程来进行轮询,而主线程在map调用中被阻塞,否则您将无法真正获得此消息,但是我不确定这样做有什么好处以上方法。

要记住的另一件事是,您使用的是内部属性MapResult,因此这可能会在将来的Python版本中中断。



 类似资料:
  • 执行周期性任务也是一样简单,您只需要编写一行代码: RecurringJob.AddOrUpdate(() => Console.Write("Easy!"), Cron.Daily); 此行在持久存储中创建一个新实体。 Hangfire Server中的一个特殊组件(请参阅 处理后台任务) 以分钟为间隔检查周期性任务,然后在队列中将其视作 fire-and-forget 任务。这样就可以照常跟踪

  • 在Spark中,一次并行执行多少个任务?在Spark中如何将阶段划分为任务?DAG在RDD中是如何工作的? 但我没有找到明确的结论。 null null 如果这是真的,那么Spark在一个执行器中的行为不是有点不确定吗(单线程v.s.多线程)? 注意,从驱动程序运到执行程序的代码可能没有考虑使用synchronized关键字的自动性问题。 Spark对此是如何处理的?

  • 可能的重复: 如何测量函数的运行时间? 我有一种I/O计时方法,它将数据从一个位置复制到另一个位置。计算执行时间的最佳和最真实的方法是什么<代码>线程<代码>定时器<代码>秒表?还有其他解决方案吗?我想要最准确的,尽可能简短的。

  • 有时候,能够知道一个计算执行消耗的时间是非常有意义的,尤其是在对比和基准测试中。最简单的一个办法就是在计算开始之前设置一个起始时候,再由计算结束时的结束时间,最后取出它们的差值,就是这个计算所消耗的时间。想要实现这样的做法,可以使用 time 包中的 Now() 和 Sub 函数: start := time.Now() longCalculation() end := time.Now() de

  • 问题内容: 我想测试某个代码段执行的SQL查询越少越好。 似乎有其自己的方法,它将做到这一点。但是由于我没有修补ActiveRecord,所以对我来说没什么用。 RSpec或ActiveRecord是否提供任何官方的公开方式来计算在代码块中执行的SQL查询的数量? 问题答案: 我认为您通过提及回答了您自己的问题,但是这里有: 我建议您看一下后面的代码,并使用它来构建自己的方法,该方法可用于计算查询

  • 问题内容: 我需要使用Maven antrun插件将Hibernate字节码检测添加到我的Java类之一中,以便启用各个字段的延迟加载。但是,我无法让插件在构建周期内执行。 我如何指示Maven在编译后但在构建期间打包之前执行antrun插件? 当前的pom.xml(代码段): 我所见过的有关此问题的所有文档均显示该插件已配置为在“流程类”阶段运行。但是,从Maven 文档看来,“ process

  • 我有一个Spring批处理作业。它的阅读器通过一些复杂的sql从数据库中读取一些记录。现在,对于我从数据库收到的每一条记录,我必须再打一个表来获取一些属性。注意:-我不能在阅读器步骤中加入这个表sql。所以这些获取的属性以及现有记录中的数据需要写入文件。这可以用Spring批处理完成吗?

  • 我正在尝试创建一个应用程序,用于查询cat图像的站点,如果JSON ID是唯一的,则将其保存到android设备,然后从设备以幻灯片格式显示它们。尽管如此,我的AsyncTask似乎并没有实际执行。调试器确认已建立网络连接,并且不会向我反馈任何错误,所以我不知道代码出了什么问题。希望有人能帮忙!代码如下: