Python 使用任务管理器进行并行计算

Python 使用任务管理器进行并行计算,python,parallel-processing,python-asyncio,python-stackless,Python,Parallel Processing,Python Asyncio,Python Stackless,我需要用python运行一些并行计算。我能想到的唯一兼容方法是多进程/分叉模型,由于以下几个原因,该模型不太理想: 据我所知,windows中的叉子很贵 细粒度流程管理(信号,即SIGSTOP/SIGCONT)很笨拙(即语言之外) 以下是任务要求: 任务可能会产生新任务 必须向任务管理器注册任务 任务不需要共享状态 任务必须返回一个值(python对象) 任务管理器负责调度和限制并发任务的数量。以下是任务管理器的要求: 当新任务启动时,任务管理器可以基于预定限制暂停其他任务 当任务返回

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

  • 据我所知,windows中的叉子很贵
  • 细粒度流程管理(信号,即SIGSTOP/SIGCONT)很笨拙(即语言之外)
以下是任务要求:

  • 任务可能会产生新任务
  • 必须向任务管理器注册任务
  • 任务不需要共享状态
  • 任务必须返回一个值(python对象)
任务管理器负责调度和限制并发任务的数量。以下是任务管理器的要求:


  • 当新任务启动时,任务管理器可以基于预定限制暂停其他任务
  • 当任务返回时,任务管理器可以继续执行其他挂起的任务
  • 当请求任务的返回值时,任务管理器可以重新组织任务优先级(防止死锁)
因此,任务管理器不需要是并行/并发进程。启动或停止时,每个任务都可以同步调用任务管理器。等待其他任务的任务也可能进行同步调用

我似乎想不出任何其他方法:

  • asyncio可以在有限的池中启动并行进程,但这种方法更适合于数据并行,而不是任务抢占。外部抢占任务(挂起)与协作编程的事件不兼容。如果我错了,请纠正我的错误,但虽然我可以使用asyncio,但它不会使我的生活更轻松(一种没有好处的抽象),因为我仍然需要使用流程和“任务开始/停止”事件的信号
  • stackless python可能适合,但它不是真正的python
有什么想法吗


另外,我的最终目标是自动并行(修饰)函数调用。任务管理器限制并行执行的任务数量(即递归函数),以避免抖动(分叉炸弹)。我需要使用python,尽管一种虽然懒惰(任务等待)、纯(无共享状态)和无堆栈(轻量级线程)的语言可能更合适……

哇,这个问题很老了,我很惊讶一个无堆栈python用户没有插话

再说一遍,Stackless Python已经/正在走在时代的前列,我们中很少有人将其投入使用

无堆栈Python确实是Python。它不仅仅是Python,但仍然是Python


我想它会非常适合你的需要。它仍然是最新的,并在本月通过提交进行维护。它相当可靠,非常适合我的需要。

您可以尝试python线程。python线程不是并行的,我不需要共享状态。此外:“目前,没有优先级,没有线程组,线程不能被销毁、停止、挂起、恢复或中断”。-因此也不适合于这些原因。那么呢?“当一个新任务启动时,任务管理器可能会根据预定的限制暂停其他任务”->“可能”表示这不是强制性的?您的任务“执行时间长”是否大于5mn?或者,它们几乎是瞬间被无数的人发现的?你有CPU限制吗?IO绑定+给@Vincent一份,芹菜怎么样?