并行运行多个python文件

时间:2015-09-17 00:50:55

标签: python

以下是我的代码。它非常简单直接,任务是同时运行三个文件。

当我运行它时,它只运行最后一个进程(每个文件应生成一个csv文件)。

SELECT
    t.Product_ID, t.Run_ID, t.cnt, i.Location
FROM (
    SELECT 
        Product_ID, Run_ID, Count(ID) AS cnt, MAX(last_modified) AS max_last_modified
    FROM ITEMS
    GROUP BY Product_ID, Run_ID
)t
INNER JOIN Items i
    ON t.Product_ID = i.Product_ID
    AND t.Run_ID = i.Run_ID
    AND t.max_last_modified = i.last_mdified

正如您所看到的,我希望运行三个文件(“launch_day_t1.py”,“launch_day_t2.py”和“launch_day_t3.py”)。

我的问题是,这是否是运行并行脚本的最佳方式(如果是),还是有更好的方法?

谢谢!

1 个答案:

答案 0 :(得分:0)

这里最好的情况是重构" launch_day_t1.py"所以你需要调用的部分被包装到函数中,而cli代码是if __name_=="__main__"' d ...看起来像这样的东西:

#launch_day_t1.py
def do_stuff():
    pass
def do_more_stuff():
    pass
if __name__ == "__main__":
    do_stuff()
    do_more_stuff()

然后,您可以导入所需的部分,而不是从命令行调用该文件,并从现有的python解释器中调用它,这将使收集输出变得更容易。

import multiprocessing
import subprocess
import launch_day_t1
import launch_day_t2

def worker(namespace):
    namespace.do_stuff()
    return namespace.do_more_stuff()


if __name__ == '__main__':
    N_CORES = 8
    files = [launch_day_t1, launch_day_t2]
    p = multiprocessing.Pool(2*N_CORES)
    print(p.map(worker, files))