并行执行长时间运行的外部流程

时间:2015-06-16 17:37:18

标签: python python-multiprocessing

在python中,我正在编写一个运行外部进程的脚本。此外部过程执行以下步骤:

  1. 从配置文件中获取值,同时考虑其他运行 流程。
  2. 使用步骤1中的值运行另一个进程。
  3. 可以通过传入要使用的值来绕过步骤1。尝试同时使用相同的值是一个错误,但顺序使用它是有效的。 (将其视为一个pid池,不超过10个可用)其他进程(例如用户登录)可以使用其中一个" pids"。

    外部进程需要几个小时才能运行,并且必须运行多个独立副本。按顺序运行它们会起作用,但需要很长时间。

    我正在使用多处理模块更改脚本以同时运行这些进程。我的代码的简化版本是:

    from multiprocessing import Pool
    import subprocess
    
    def longRunningTask(n):
        subprocess.call(["ls", "-l"]) # real code uses a process with no screen I/O
    
    if __name__ == '__main__':
        myArray = [1,2,3,4,5]
        pool = Pool(processes=3)
        pool.map(longRunningTask, myArray)
    

    使用此代码失败,因为它使用相同的" pid"为每个过程开始。

    我提出的解决方案是:

    1. 如果通话失败,请随机延迟并重试。这可能会结束 忙碌等待几个小时,如果有足够的时间" pids"正在使用中。
    2. 在开始进程之前创建可用" pids",get()项目的队列,并在完成时放入()。这仍然需要等待" pid"正在使用中,与第1号相同。
    3. 使用管理器来保存一组" pids"正在使用(开始空)。在开始这个过程之前,先得到一个" pid",检查它是否在数组中(如果是的话再次启动),将其添加到数组中,完成后将其删除。
    4. 方法3是否存在问题,或者有不同的方法吗?

0 个答案:

没有答案