iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >Linux下怎么安装和使用Parallel
  • 788
分享到

Linux下怎么安装和使用Parallel

2023-06-28 00:06:26 788人浏览 八月长安
摘要

这篇文章主要介绍“linux下怎么安装和使用Parallel”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux下怎么安装和使用Parallel”文章能帮助大家解决问题。Parallel Pyt

这篇文章主要介绍“linux下怎么安装和使用Parallel”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux下怎么安装和使用Parallel”文章能帮助大家解决问题。

Parallel Pythonpython进行分布式计算的开源模块,能够将计算压力分布到多核CPU或集群的多台计算机上,能够非常方便的在内网中搭建一个自组织的分布式计算平台。

Linux下怎么安装和使用Parallel

安装 GNU Parallel

GNU Parallel 很可能没有预装在你的 Linux 或 BSD 主机上,你可以从软件源中安装。以 Fedora 为例:

$ sudo dnf install parallel

对于 NetBSD:

# pkg_add parallel

如果各种方式都不成功,请参考项目主页[1]。

从串行到并行

正如其名称所示,Parallel 的强大之处是以并行方式执行任务;而我们中不少人平时仍然以串行方式运行任务。

当你对多个对象执行某个命令时,你实际上创建了一个任务队列。一部分对象可以被命令处理,剩余的对象需要等待,直到命令处理它们。这种方式是低效的。只要数据够多,总会形成任务队列;但与其只使用一个任务队列,为何不使用多个更小规模的任务队列呢?

假设你有一个图片目录,你希望将目录中的图片从 JEEG 格式转换为 PNG 格式。有多种方法可以完成这个任务。可以手动用 GIMP 打开每个图片,输出成新格式,但这基本是最差的选择,费时费力。

上述方法有一个漂亮且简洁的变种,即基于 shell 的方案:

$ convert 001.jpeg 001.png$ convert 002.jpeg 002.png$ convert 003.jpeg 003.png... 略 ...

对于初学者而言,这是一个不小的转变,而且看起来是个不小的改进。不再需要图像界面和不断的鼠标点击,但仍然是费力的。

进一步改进:

$ for i in *jpeg; do convert $i $i.png ; done

至少,这一步设置好任务执行,让你节省时间去做更有价值的事情。但问题来了,这仍然是串行操作;一张图片转换完成后,队列中的下一张进行转换,依此类推直到全部完成。

使用 Parallel:

$ find . -name "*jpeg" | parallel -I% --max-args 1 convert % %.png

这是两条命令的组合:find 命令,用于收集需要操作的对象;parallel 命令,用于对象排序并确保每个对象按需处理。

  • find . -name “*jpeg” 查找当前目录下以 jpeg 结尾的所有文件。
  • parallel 调用 GNU Parallel。
  • -I% 创建了一个占位符 %,代表 find 传递给 Parallel 的内容。如果不使用占位符,你需要对 find 命令的每一个结果手动编写一个命令,而这恰恰是你想要避免的。
  • –max-args 1 给出 Parallel 从队列获取新对象的速率限制。考虑到 Parallel 运行的命令只需要一个文件输入,这里将速率限制设置为 1。假如你需要执行更复杂的命令,需要两个文件输入(例如 cat 001.txt 002.txt > new.txt),你需要将速率限制设置为 2。
  • convert % %.png 是你希望 Parallel 执行的命令。

组合命令的执行效果如下:find 命令收集所有相关的文件信息并传递给 parallel,后者(使用当前参数)启动一个任务,(无需等待任务完成)立即获取参数行中的下一个参数(LCTT 译注:管道输出的每一行对应 parallel 的一个参数,所有参数构成参数行);只要你的主机没有瘫痪,Parallel 会不断做这样的操作。旧任务完成后,Parallel 会为分配新任务,直到所有数据都处理完成。不使用 Parallel 完成任务大约需要 10 分钟,使用后仅需 3 至 5 分钟。

多个输入

只要你熟悉 find 和 xargs (整体被称为 GNU 查找工具,或 findutils),find 命令是一个完美的 Parallel 数据提供者。它提供了灵活的接口,大多数 Linux 用户已经很习惯使用,即使对于初学者也很容易学习

find 命令十分直截了当:你向 find 提供搜索路径和待查找文件的一部分信息。可以使用通配符完成模糊搜索;在下面的例子中,星号匹配任何字符,故 find 定位(文件名)以字符 searchterm 结尾的全部文件:

$ find /path/to/directory -name "*searchterm"

默认情况下,find 逐行返回搜索结果,每个结果对应 1 行:

$ find ~/graphics -name "*jpg"/home/seth/graphics/001.jpg/home/seth/graphics/cat.jpg/home/seth/graphics/penguin.jpg/home/seth/graphics/IMG_0135.jpg

当使用管道将 find 的结果传递给 parallel 时,每一行中的文件路径被视为 parallel 命令的一个参数。另一方面,如果你需要使用命令处理多个参数,你可以改变队列数据传递给 parallel 的方式。

下面先给出一个不那么实际的例子,后续会做一些修改使其更加有意义。如果你安装了 GNU Parallel,你可以跟着这个例子操作。

假设你有 4 个文件,按照每行一个文件的方式列出,具体如下:

$ echo ada > ada ; echo lovelace > lovelace$ echo richard > richard ; echo stallman > stallman$ ls -1adalovelacerichardstallman

你需要将两个文件合并成第三个文件,后者同时包含前两个文件的内容。这种情况下,Parallel 需要访问两个文件,使用 -I% 变量的方式不符合本例的预期。

Parallel 默认情况下读取 1 个队列对象:

$ ls -1 | parallel echoadalovelacerichardstallman

现在让 Parallel 每个任务使用 2 个队列对象:

$ ls -1 | parallel --max-args=2 echoada lovelacerichard stallman

现在,我们看到行已经并合并;具体而言,ls -1 的两个查询结果会被同时传送给 Parallel。传送给 Parallel 的参数涉及了任务所需的 2 个文件,但目前还只是 1 个有效参数:(对于两个任务分别为)“ada lovelace” 和 “richard stallman”。你真正需要的是每个任务对应 2 个独立的参数。

值得庆幸的是,Parallel 本身提供了上述所需的解析功能。如果你将 –max-args 设置为 2,那么 {1}和 {2} 这两个变量分别代表传入参数的第一和第二部分:

$ ls -1 | parallel --max-args=2 cat {1} {2} ">" {1}_{2}.person

在上面的命令中,变量 {1} 值为 ada 或 richard (取决于你选取的任务),变量 {2} 值为 lovelace 或 stallman。通过使用重定向符号(放到引号中,防止被 Bash 识别,以便 Parallel 使用),(两个)文件的内容被分别重定向至新文件 ada_lovelace.person 和 richard_stallman.person。

$ ls -1adaada_lovelace.personlovelacerichardrichard_stallman.personstallman$ cat ada_*personada lovelace$ cat ri*personrichard stallman

如果你整天处理大量几百 MB 大小的日志文件,那么(上述)并行处理文本的方法对你帮忙很大;否则,上述例子只是个用于上手的示例。

然而,这种处理方法对于很多文本处理之外的操作也有很大帮助。下面是来自电影产业的真实案例,其中需要将一个目录中的视频文件和(对应的)音频文件进行合并。

$ ls -112_LS_establishing-manor.avi12_wildsound.flac14_butler-dialogue-mixed.flac14_MS_butler.avi...略...

使用同样的方法,使用下面这个简单命令即可并行地合并文件:

$ ls -1 | parallel --max-args=2 FFmpeg -i {1} -i {2} -vcodec copy -acodec copy {1}.mkv

简单粗暴的方式

上述花哨的输入输出处理不一定对所有人的口味。如果你希望更直接一些,可以将一堆命令甩给 Parallel,然后去干些其它事情。

首先,需要创建一个文本文件,每行包含一个命令:

$ cat jobs2runbzip2 oldstuff.taroggenc music.flacopusenc ambiance.wavconvert bigfile.tiff small.jpegffmepg -i foo.avi -v:b 12000k foo.mp4xsltproc --output build/tmp.fo style/dm.xsl src/tmp.xmlbzip2 arcHive.tar

接着,将文件传递给 Parallel:

$ parallel --jobs 6

现在文件中对应的全部任务都在被 Parallel 执行。如果任务数量超过允许的数目(LCTT 译注:应该是 –jobs 指定的数目或默认值),Parallel 会创建并维护一个队列,直到任务全部完成。

关于“Linux下怎么安装和使用Parallel”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网操作系统频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Linux下怎么安装和使用Parallel

本文链接: https://www.lsjlt.com/news/314987.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux下怎么安装和使用Parallel
    这篇文章主要介绍“Linux下怎么安装和使用Parallel”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux下怎么安装和使用Parallel”文章能帮助大家解决问题。Parallel Pyt...
    99+
    2023-06-28
  • Linux下怎么安装和使用GitLab
    这篇文章主要介绍了Linux下怎么安装和使用GitLab的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux下怎么安装和使用GitLab文章都会有所收获,下面我们一起来看看吧。安装1.配置yum源vim /...
    99+
    2023-06-28
  • Linux下怎么安装和使用Dokuwiki
    这篇文章主要介绍“Linux下怎么安装和使用Dokuwiki”,在日常操作中,相信很多人在Linux下怎么安装和使用Dokuwiki问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux下怎么安装和使用Do...
    99+
    2023-06-27
  • Linux下怎么安装和使用tcping
    这篇文章主要介绍“Linux下怎么安装和使用tcping”,在日常操作中,相信很多人在Linux下怎么安装和使用tcping问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux下怎么安装和使用tcping...
    99+
    2023-06-27
  • 怎么在Linux下安装和使用MySQL
    本篇内容介绍了“怎么在Linux下安装和使用MySQL”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、引...
    99+
    2024-04-02
  • Linux下怎么安装和使用rpm命令
    本文小编为大家详细介绍“Linux下怎么安装和使用rpm命令”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux下怎么安装和使用rpm命令”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Linux常用命令rp...
    99+
    2023-06-28
  • linux系统下怎么安装和使用LumaQQ
    本篇内容主要讲解“linux系统下怎么安装和使用LumaQQ”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux系统下怎么安装和使用LumaQQ”吧!LumaQQ是QQ的跨平台版本,目前包括...
    99+
    2023-06-10
  • Linux下怎么安装和使用dust工具
    这篇文章主要介绍“Linux下怎么安装和使用dust工具”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux下怎么安装和使用dust工具”文章能帮助大家解决问题。dust是一个提供文件类型和元数...
    99+
    2023-06-28
  • Linux下怎么安装使用Node.js
    这篇文章主要介绍“Linux下怎么安装使用Node.js”,在日常操作中,相信很多人在Linux下怎么安装使用Node.js问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux下怎么安装使用Node.js...
    99+
    2023-06-27
  • Linux下怎么安装并使用Remmina
    本篇内容主要讲解“Linux下怎么安装并使用Remmina”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下怎么安装并使用Remmina”吧!Remmina 是一款在 Linux 和其他...
    99+
    2023-06-27
  • Linux下怎么安装及使用OpenCV
    这篇文章主要介绍“Linux下怎么安装及使用OpenCV”,在日常操作中,相信很多人在Linux下怎么安装及使用OpenCV问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux下怎么安装及使用OpenCV...
    99+
    2023-06-27
  • Linux下怎么安装并使用Hping
    本篇内容主要讲解“Linux下怎么安装并使用Hping”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下怎么安装并使用Hping”吧!Hping是一个命令行下使用的TCP/IP数据包组装...
    99+
    2023-06-27
  • Linux下怎么安装并使用Dutree
    这篇文章主要介绍“Linux下怎么安装并使用Dutree”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux下怎么安装并使用Dutree”文章能帮助大家解决问题。dutree是一款免费的开源,快...
    99+
    2023-06-27
  • Linux下ClamAV怎么安装及使用
    要在Linux下安装和使用ClamAV,您可以按照以下步骤进行操作:1. 安装ClamAV软件包:打开终端,并根据您使用的Linux...
    99+
    2023-08-23
    Linux ClamAV
  • linux下怎么使用docker安装minio
    这篇文章主要介绍“linux下怎么使用docker安装minio”,在日常操作中,相信很多人在linux下怎么使用docker安装minio问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux下怎么使用d...
    99+
    2023-07-05
  • Linux下怎么安装并使用ksnip
    这篇文章主要介绍“Linux下怎么安装并使用ksnip”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux下怎么安装并使用ksnip”文章能帮助大家解决问题。使用你首选的包管理器安装 Ksnip...
    99+
    2023-06-27
  • Linux下如何安装和使用Ganglia
    这篇文章给大家分享的是有关Linux下如何安装和使用Ganglia的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Ganglia是一个跨平台可扩展的,高 性能计算系统下的分布式监控系统,如集群和网格。它是基于分层设...
    99+
    2023-06-27
  • Linux下如何安装和使用APF
    这篇文章主要为大家展示了“Linux下如何安装和使用APF”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux下如何安装和使用APF”这篇文章吧。APF是一款Linux下的iptables防...
    99+
    2023-06-28
  • Linux下如何安装和使用OpenNMS
    这篇文章将为大家详细讲解有关Linux下如何安装和使用OpenNMS,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。OpenNMS是一个企业级基于Java/XML的分布式网络和系统监控管理平台。OpenNM...
    99+
    2023-06-28
  • Linux下CUDA如何安装和使用
    这篇文章将为大家详细讲解有关Linux下CUDA如何安装和使用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。CUDA是显卡厂商NVIDIA推出的运算平台。 CUD是一种由NVIDIA推出的通用并行计算架构...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作