多处理Python模块的Pool类。有一个定义的run方法来执行任务。通过传递您拥有的多个任务,创建系统拥有的特定数量CPU的Pool类的池对象。通过调用map示例方法启动池对象中的每个任务,并将run函数和任务列表作为参数传递。提示:walk()通过自上而下或自下而上遍历目录树来生成目录树中的文件名,这在Python中用于遍历文件系统。
多重同步行程.py
#!/usr/bin/env python3
from multiprocessing import Pool
def run(task):
# Do something with task here
print("Handling {}".format(task))
if __name__ == "__main__":
tasks = ['task1', 'task2', 'task3']
# Create a pool of specific number of CPUs
p = Pool(len(tasks))
# Start each task within the pool
p.map(run, tasks)
/data/prod的子文件夹层次结构,data来自不同的项目(例如,beta、gamma、kappa),它们彼此独立。您必须使用多处理和子处理模块方法将/data/prod中的数据同步到/data/prod_backup文件夹。
尝试应用多处理,它利用空闲的CPU核心进行并行处理。在这里,您必须使用多处理和子进程模块方法将/data/prod中的数据同步到/data/prod_backup文件夹。
提示:os.walk()通过自上而下或自下而上遍历目录树来生成目录树中的文件名,这在Python中用于遍历文件系统。
Dailysync.py
#!/usr/bin/env python
import subprocess
src = "/data/prod/"
dest = "/data/prod_backup/"
subprocess.call(["rsync", "-arq", src, dest])
5条答案
按热度按时间mmvthczy1#
对我来说
1.我将
src
设置为全局,因为它在其他函数中被引用;1.请使用完整路径名称
src = "{}/data/prod/".format(os.getenv("HOME"))
,而不要使用src = "/data/prod/"
。1.了解
os.walk()
的工作原理,并访问所需的所有值,如root = next(os.walk(src))[0]
和dirs = next(os.walk(src))[0]
1.如果文件夹是空的,
Pool(len(folders))
将返回0,并且Map至少需要1个处理器,所以我处理了它。dced5bon2#
如果有人想试试这个,这个很酷,代码更少:
km0tfn4u3#
这是我最后的回答,基本上是:
1:将源(src)设置为绝对文件路径。
2:遍历
src
文件夹,其中os.walk()
将绝对路径连接到该文件夹。3:创建池并将函数Map到字典
4:让函数执行rsync
zxlwwiss4#
我也是Python的新手,和你学习的是同一门课程。我附上了下面的代码,我为这个任务写的,它完成了任务。
我知道这不是最有效的代码,这就是为什么更有经验的人可以检查它,以及改进它
jqjz2hbq5#
此问题是针对在Coursera平台上托管的Google故障排除和调试技术(第2周)课程的使用Python修复运行缓慢的系统测试提出的解决方案。
在我的代码中,我列出了
data/prod/
中的所有目录,然后将该列表用作run
函数的参数,该函数在Process的Pool中运行,以便并行启动更多的rsync
示例它已经可以使用了,您甚至可以复制粘贴它,但请记住,您必须相应地更改您的用户名(它应该是
student-03-12345678
这样的格式,请查看代码注解来更改它)。