2024-04-19 17:41:30 发布
网友
我想知道,从已经运行的Python脚本内部将子进程转换为另一个Python脚本的执行是否是一种常见的做法?你知道吗
我得说子流程管道()将是一个选择,如果它用于运行一些外部进程(例如:其他应用程序或系统命令)。要“虚拟地”子进程当前正在运行的脚本的方法(或函数),multitreament是完全有意义的。你知道吗
import os, sys, subprocess from multiprocessing import Pool def copyUsingSubprocess(source): folder=os.path.dirname(source) srcFileName, srcFileExt=os.path.splitext(os.path.basename(source)) destFilename=srcFileName+'_dest'+srcFileExt dest='/'.join([folder,destFilename]) cmd=['cp', source, dest] proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) sources = ['/Volumes/files/a.data','/Volumes/files/b.data', '/Volumes/files/c.data','/Volumes/files/d.data', '/Volumes/files/e.data','/Volumes/files/f.data'] pool = Pool(20) results = pool.map(copyUsingSubprocess, sources)
import os, sys, subprocess def copyUsingSubprocess(cmd): proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) sources = ['/Volumes/files/a.data','/Volumes/files/b.data', '/Volumes/files/c.data','/Volumes/files/d.data', '/Volumes/files/e.data','/Volumes/files/f.data'] for source in sources: folder=os.path.dirname(source) srcFileName, srcFileExt=os.path.splitext(os.path.basename(source)) destFilename=srcFileName+'_dest'+srcFileExt dest='/'.join([folder,destFilename]) cmd=['cp', source, dest] copyUsingSubprocess(cmd)
从其他文件运行Python代码的通常方法是将其作为模块导入,并直接使用其中定义的对象:
# assert "/filepath/to" in sys.path import your_script # import module defined in your_script.py your_script.copyfile(srcfile, dest)
要在多个进程中运行Python代码,可以使用multiprocessing模块:
multiprocessing
from multiprocessing import Pool import your_script def copyfile(srcfile): try: dest = ... srcfile ... your_script.copyfile(srcfile, dest) except Exception as e: return srcfile, None, str(e) else: return srcfile, dest, None # no errors def main(): sources = [...] pool = Pool(20) # don't copy more that 20 files at once results = pool.map(copyfile, sources) if __name__ == "__main__": main()
要使用线程而不是进程,只需更改导入:
from multiprocessing.dummy import Pool # use threads
目前尚不清楚并行IO操作对性能的影响。你知道吗
下面是一个工作代码,它利用多进程和子进程的popen()将文件从源复制到目标
下面的是一个类似的代码。它确实使用了子流程.popen()执行文件复制。但它不需要调用多处理池.map()方法
从其他文件运行Python代码的通常方法是将其作为模块导入,并直接使用其中定义的对象:
要在多个进程中运行Python代码,可以使用
multiprocessing
模块:要使用线程而不是进程,只需更改导入:
目前尚不清楚并行IO操作对性能的影响。你知道吗
相关问题 更多 >
编程相关推荐