基于任务的并行化框架
项目描述
Jug允许您编写分成任务的代码,并在不同的处理器上运行不同的任务。
它使用文件系统在进程之间进行通信,并支持NFS,因此您可以协调不同机器上的进程。
Jug是纯Python实现,应该在任何平台上都能运行。
支持Python 3.5及以上的版本。
网站: http://luispedro.org/software/jug
文档: https://jug.readthedocs.org/
邮件列表: https://groups.google.com/group/jug-users
客户评价
“我已经非常成功地将jug用于分配运行大量参数组合的作业。” - Andreas Longva
安装
您可以使用pip安装jug
pip install Jug
或者,如果您使用conda,可以使用以下命令从conda-forge安装jug
conda config --add channels conda-forge conda install jug
引用
如果您使用Jug为科学出版物生成结果,请引用
Coelho, L.P.,(2017). Jug:Python中的并行可重复计算软件。开放研究软件杂志。5(1),第30页。
简例
以下是一个一分钟的示例。将其保存到名为 primes.py 的文件中(如果您已安装jug,您可以通过在命令行中运行 jug demo 获取此示例的稍长版本)
from jug import TaskGenerator from time import sleep @TaskGenerator def is_prime(n): sleep(1.) for j in range(2,n-1): if (n % j) == 0: return False return True primes100 = [is_prime(n) for n in range(2,101)]
这是一个寻找100以内所有素数的暴力方法。当然,这只是为了教学目的,通常您会使用更好的方法。同样,sleep 函数是为了让它不要运行得太快。尽管如此,它展示了Jug在处理令人尴尬的并行问题时的基本功能。
输入 jug status primes.py 来获取
Task name Waiting Ready Finished Running ---------------------------------------------------------------------- primes.is_prime 0 99 0 0 ...................................................................... Total: 0 99 0 0
这告诉您,您有99个名为 primes.is_prime 的任务准备运行。因此,运行 jug execute primes.py &。您甚至可以在后台运行多个实例(例如,如果您有多个核心)。启动4个实例并等待几秒钟后,您可以再次检查状态(使用 jug status primes.py)
Task name Waiting Ready Finished Running ---------------------------------------------------------------------- primes.is_prime 0 63 32 4 ...................................................................... Total: 0 63 32 4
现在您有32个任务已完成,4个正在运行,63个仍然准备就绪。最终,它们都将完成,您可以使用 jug shell primes.py 来检查结果。这将为您提供一个 ipython 命令行界面。变量 primes100 可用,但它是一个丑陋的 jug.Task 对象列表。要获取实际值,您需要调用 value 函数
In [1]: primes100 = value(primes100) In [2]: primes100[:10] Out[2]: [True, True, False, True, False, True, False, False, False, True]
新功能
版本 2.3.1(2023年11月5日)
更新以兼容Python 3.12
版本 2.3.0(2023年6月25日)
jug shell:添加 get_filtered_tasks()
jug:修复 jug --version(在重构以使用子命令时已损坏)
jug shell:修复在没有依赖关系时jug shell中的消息(它会重复打印消息,指出“这将只运行一次”)
jug pack:使使元素失效更快
file_store:确保临时目录存在
版本 2.2.3(2023年5月26日)- 修复适用于较新版本的IPython的jug shell
版本 2.2.2(2022年7月19日)- 修复使用packs时jug cleanup的问题(使用 jug pack)
版本 2.2.1(2022年5月19日)- 修复jug cleanup与redis后端相关的bug(问题 #86)
版本 2.2.0(2022年5月3日)
添加 jug pack 子命令
使 get_tasks() 返回jug shell内部任务的副本
移除 six 依赖
版本 2.1.1(2021年3月18日)
将要求文件包含在发行版中
版本 2.1.0(2021年3月18日)
对webstatus的改进(由Robert Denham提供)
移除对Python 2.7的支持
修复Python 3.8的输出编码问题
修复 mapreduce() & status --cache 的混合bug
使 block_access(在 mapreduce() 中使用)更快(20倍)
修复重要的redis bug
在 cleanup 命令中提供更精确的输出
版本 2.0.2(2020年6月11日,星期四)
修复命令行参数解析
版本 2.0.1(2020年6月11日,星期四)
修复处理 JUG_EXIT_IF_FILE_EXISTS 环境变量的方式
修复传递参数给 jug.main() 函数的方式
将 --pdb 扩展到在导入jugfile时引发的异常(问题 #79)
版本 2.0.0(2020年2月21日,星期五)
jug.backend.base_store 添加了1个新方法 'listlocks'。
jug.backend.base_lock 添加了2个新方法 'fail' 和 'is_failed'。
添加 'jug execute –keep-failed' 以保留失败任务的锁。
添加 'jug cleanup –failed-only' 以从失败任务中删除锁。
现在 'jug status' 和 'jug graph' 会显示失败的任务。
默认检查环境退出变量(由 Renato Alves 建议,问题 #66)。
修复 'jug sleep-until' 在存在 barrier() 的情况下的问题(问题 #71)。
对于旧版本,请参阅 ChangeLog 文件或完整历史记录。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。