使用importlib运行多个Python脚本

使用importlib运行多个Python脚本,python,sql,python-multiprocessing,python-multithreading,python-importlib,Python,Sql,Python Multiprocessing,Python Multithreading,Python Importlib,我有一个Python脚本,它基本上运行一个日常数据提取过程,在该脚本中运行20个脚本。每个子脚本都运行一个sql查询 我有一个任务调度程序上的脚本,从凌晨3点开始,大约2小时后结束 我想提高这个脚本的速度,同时运行所有脚本 我已经研究过线程和多处理,但我对这些概念和一般的计算机科学相当陌生。进行此过程的最佳方式是什么 导入操作系统 导入系统 导入导入库 作为pd进口熊猫 #关键文件夹名称和位置 #主文件夹位置 每日数据路径='桌面:\\每日数据' #登录文件夹名称-必须保存在桌面上,并且必须包

我有一个Python脚本,它基本上运行一个日常数据提取过程,在该脚本中运行20个脚本。每个子脚本都运行一个sql查询

我有一个任务调度程序上的脚本,从凌晨3点开始,大约2小时后结束

我想提高这个脚本的速度,同时运行所有脚本

我已经研究过线程和多处理,但我对这些概念和一般的计算机科学相当陌生。进行此过程的最佳方式是什么


导入操作系统
导入系统
导入导入库
作为pd进口熊猫
#关键文件夹名称和位置
#主文件夹位置
每日数据路径='桌面:\\每日数据'
#登录文件夹名称-必须保存在桌面上,并且必须包含名为Login.py的模块
login\u文件夹='login'
#登录文件夹位置
login\u folder\u path=os.path.expanduser('~')+'\\Desktop\\'+登录\u文件夹
#将Python指向正确的目录
sys.path.append(每日数据路径)
sys.path.append(登录\文件夹\路径)
#函数动态导入和运行每个脚本
def脚本_导入(路径_名称):
尝试:
importlib.\uuuu import\uuuu(路径名称)
run_ind='1'
除:
run_ind='0'
#要迭代的每日数据路径列表
路径=['script1.Scripts.script1,
'script2.Scripts.script2,
....,
'script20.Scripts.script20
]
对于路径中的路径:
#调用script_import函数来运行每日数据处理
脚本导入(路径)

您可以使用模块中的工作人员池,以便在单独的进程中执行脚本。该类提供了
map\u async
方法,该方法与内置的
map
函数类似,但并行执行所有操作。代码可能如下所示:

import importlib
import multiprocessing


def script_import(name):
    importlib.import_module(name)


if __name__ == '__main__':
    # List of daily data paths to iterate over
    paths = []

    # create process pool
    procpool = multiprocessing.Pool()

    # apply 'script_import' function in parallel
    result = procpool.map_async(script_import, paths)

    # close the pool and wait for processes to complete
    procpool.close()
    procpool.join()

因为听起来您的子脚本可以独立于主脚本运行,所以我建议使用
subprocess.Popen
,例如

from subprocess import Popen
import sys
cmnds = [... a list of commands to execute ...]
tasks = [Popen(cmnd) for cmnd in cmnds]
result = sum([task.wait() for task in tasks])
sys.exit(result)

你用过图书馆吗?