任务管理器

时间:2016-05-09 20:56:54

标签: python parallel-processing python-asyncio python-stackless

我需要在python中运行一些并行计算。我能想到的唯一兼容的方法是多进程/ fork模型,由于以下几个原因,它不太理想:

  • 据我所知,Windows中的 forks 很贵
  • 细粒度的流程管理(信号,即SIGSTOP / SIGCONT)很笨重(即在语言之外)

这些是任务要求:

  • 任务可能会产生新任务
  • 任务必须在任务管理器中注册
  • 任务不需要共享状态
  • 任务必须返回一个值(python对象)

任务管理器负责安排和限制并发任务的数量。这些是任务管理员的要求:

  • 当新任务启动时,任务管理器可以基于预定限制暂停其他任务
  • 当任务返回时,任务管理器可以继续其他暂停的任务
  • 当请求任务的返回值时,任务管理器可以重新组织任务优先级(防止死锁)

所以你看,任务管理器不需要是并行/并发进程。每个任务可以在启动或停止时对任务管理器进行同步调用。等待其他任务的任务也可以进行同步调用。

我似乎无法想到任何其他方法:

  • asyncio可以在有限的池中启动并行进程,但该方法更适合数据并行而不是任务抢占。外部预占任务(暂停)与协作编程事件不兼容。如果我错了,请纠正我,但是当我可以使用asyncio时,它不会让我的生活更轻松(没有利益的抽象),因为我仍然需要使用进程,和#34;任务开始/停止"事件?
  • stackless python可能是合适的,但它不是真正的python?

有什么想法吗?

P.S。我的最终目标是自动并行化(修饰)函数调用。任务管理器限制并行执行的任务数(即递归函数)以避免颠簸(fork炸弹)。我需要使用python,即使是懒惰(任务等待),纯(无共享状态)和无堆栈(轻量级线程)语言可能更合适......

1 个答案:

答案 0 :(得分:0)

哇,这个问题很老了,我很惊讶一个Stackless Python用户没有被发现...

再一次,无堆栈Python领先于时代,我们中很少有人能够使用它。

无堆栈Python确实是Python。它不仅是Python,而且还是Python。

Stackless Python Wiki

我认为它非常适合您的需求。它仍然是最新的,并通过本月的一次提交进行维护。它相当可靠,并且可以很好地满足我的需求。