同时从Stata运行多个python脚本

时间:2017-10-05 20:13:06

标签: parallel-processing stata

这就是我想要做的事情:

  1. 同时从Stata调用8个python脚本(为了节省时间;如果顺序执行,则需要太长时间)。我知道怎么称呼:

    shell“C:/Python34/python.exe”“A:/ my code / Test.py”

  2. 让Stata等到他们全部完成,然后在Stata内做。

  3. 是否可以同时调用多个Python脚本?

1 个答案:

答案 0 :(得分:2)

我无法访问Windows计算机,但这样的事情可能会成功。更改第二部分以匹配您在Python中所做的事情。

/* (1) Instead of Python scripts, count some files and store the counts */
winexec rm "/Users/dimitriy/*_count.txt"
winexec find /Users/dimitriy -type f -name '*.ado' | wc -l > ado_count.txt
winexec find /Users/dimitriy -type f -name '*.pdf' | wc -l > pdf_count.txt
winexec find /Users/dimitriy -type f -name '*.do'  | wc -l > do_count.txt


/* (2) Wait for ALL 3 files to be generated since Stata does not wait for winexec commands to finish */
capture ssc install fs, replace

while "`num_files'" != "3" {
    local num_files: word count `r(files)'
    sleep 10000 // sleep 10 seconds
    fs *_count.txt
}

di "All Done!"

对以下评论的回复:

这没有任何意义,并且不会因为一系列原因而起作用。我假设您的Python脚本吐出8个输出文件。由于我不知道它们是什么,我尝试使用3个Mac命令生成三个文件,以便在步骤1中使用。步骤2在继续之前验证这3个文件是否存在。

假设每个Python脚本我为i = 1,..,8生成一个名为output_i.txt的文件,你需要有这样的东西:

forvalues v=1/8 {
    winexec "C:/Python34/python.exe" "D:/my code/PythonCode`v'.py"
}

capture ssc install fs, replace

while "`num_files'" != "8" {
    local num_files: word count `r(files)'
    sleep 10000 // sleep 10 seconds
    fs output_*.txt
}