跳转到主要内容

基于任务的并行化框架

项目描述

Jug允许您编写分成任务的代码,并在不同的处理器上运行不同的任务。

https://github.com/luispedro/jug/actions/workflows/python-package.yml/badge.svg https://zenodo.org/badge/205237.svg https://anaconda.org/conda-forge/jug/badges/installer/conda.svg https://static.pepy.tech/personalized-badge/jug?period=total&units=international_system&left_color=black&right_color=blue&left_text=Downloads https://img.shields.io/badge/CITATION-doi.org%2F10.5334%2Fjors.161-green.svg

它使用文件系统在进程之间进行通信,并支持NFS,因此您可以协调不同机器上的进程。

Jug是纯Python实现,应该在任何平台上都能运行。

支持Python 3.5及以上的版本。

网站: http://luispedro.org/software/jug

文档: https://jug.readthedocs.org/

视频: 在vimeoshowmedo

邮件列表: 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页。

https://doi.org/10.5334/jors.161

简例

以下是一个一分钟的示例。将其保存到名为 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 文件或完整历史记录

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

Jug-2.3.1.tar.gz (69.7 kB 查看哈希值)

上传时间 源代码

构建分发

Jug-2.3.1-py3-none-any.whl (116.1 kB 查看哈希值)

上传时间 Python 3

由以下支持