Ipython并行多核进程

Ipython并行多核进程,python,multithreading,parallel-processing,ipython,Python,Multithreading,Parallel Processing,Ipython,我想使用ipythonparallel在计算集群上执行作业。设置工作都相对简单,但我将执行的一些作业包括对多线程应用程序(生物信息学)的子流程调用。有没有一种简单的方法告诉ipython一个python调用正在消耗多个核心或整个引擎?更一般地说,我希望跟踪已使用和可用的资源,以便运行异构作业(内存需求、核心需求) IPython不为单个任务分配任何资源。所有资源分配都在引擎创建时完成。 例如,如果您的作业已经是完全多线程和多核感知的,那么您可能不希望每个物理机器有多个IPython引擎。如果您的

我想使用ipythonparallel在计算集群上执行作业。设置工作都相对简单,但我将执行的一些作业包括对多线程应用程序(生物信息学)的子流程调用。有没有一种简单的方法告诉ipython一个python调用正在消耗多个核心或整个引擎?更一般地说,我希望跟踪已使用和可用的资源,以便运行异构作业(内存需求、核心需求)

IPython不为单个任务分配任何资源。所有资源分配都在引擎创建时完成。 例如,如果您的作业已经是完全多线程和多核感知的,那么您可能不希望每个物理机器有多个IPython引擎。如果您的作业是单线程的,那么每个CPU核心一个引擎是合乎逻辑的。如果您的任务绑定在多个非独占资源上,那么您可能需要更多的引擎而不是核心

如果您的工作是高度异构的(例如,某些任务仅限于一个线程,而其他任务将愉快地使用整个机器), 然后,您可能需要安排一些更复杂的日程安排。有两条有用的信息可以尝试创建引擎子集的视图。例如,集群中每台机器只有一个引擎的负载平衡直接视图:

import socket
host_map = client[:].apply_async(socket.gethostname).get_dict()
r = { v:k for k,v in host_map.items() }
one_id_per_machine = list(r.values())
one_per_machine = client[one_id_per_machine]
lb_per_machine = client.load_balanced_view(one_id_per_machine)
另一个是可以用来设置障碍的任务,允许一个任务阻止其他任务提交到其他引擎