{"id":27918765,"url":"https://github.com/juliaparallel/distributednext.jl","last_synced_at":"2025-05-06T18:25:24.816Z","repository":{"id":260158304,"uuid":"877953024","full_name":"JuliaParallel/DistributedNext.jl","owner":"JuliaParallel","description":"Bleeding-edge fork of Distributed.jl","archived":false,"fork":false,"pushed_at":"2025-02-26T21:14:08.000Z","size":957,"stargazers_count":14,"open_issues_count":6,"forks_count":1,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-04-13T07:07:48.203Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://juliaparallel.org/DistributedNext.jl/","language":"Julia","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JuliaParallel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-24T14:21:57.000Z","updated_at":"2025-02-12T18:00:28.000Z","dependencies_parsed_at":"2024-12-09T13:36:34.104Z","dependency_job_id":"3dc40df9-5996-4139-9245-4e811734b591","html_url":"https://github.com/JuliaParallel/DistributedNext.jl","commit_stats":null,"previous_names":["juliaparallel/distributednext.jl"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaParallel%2FDistributedNext.jl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaParallel%2FDistributedNext.jl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaParallel%2FDistributedNext.jl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaParallel%2FDistributedNext.jl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JuliaParallel","download_url":"https://codeload.github.com/JuliaParallel/DistributedNext.jl/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252742656,"owners_count":21797287,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-06T18:25:24.247Z","updated_at":"2025-05-06T18:25:24.784Z","avatar_url":"https://github.com/JuliaParallel.png","language":"Julia","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DistributedNext\n\nThe `DistributedNext` package provides functionality for creating and\ncontrolling multiple Julia processes remotely, and for performing distributed\nand parallel computing. It uses network sockets or other supported interfaces to\ncommunicate between Julia processes, and relies on Julia's `Serialization`\nstdlib package to transform Julia objects into a format that can be transferred\nbetween processes efficiently. It provides a full set of utilities to create and\ndestroy new Julia processes and add them to a \"cluster\" (a collection of Julia\nprocesses connected together), as well as functions to perform Remote Procedure\nCalls (RPC) between the processes within a cluster. See the `API` section for\ndetails.\n\n\n## API\n\nThe public API of `DistributedNext` consists of a variety of functions for various tasks; for creating and destroying processes within a cluster:\n\n- `addprocs` - create one or more Julia processes and connect them to the cluster\n- `rmprocs` - shutdown and remove one or more Julia processes from the cluster\n\nFor controlling other processes via RPC:\n\n- `remotecall` - call a function on another process and return a `Future` referencing the result of that call\n- `Future` - an object that references the result of a `remotecall` that hasn't yet completed - use `fetch` to return the call's result, or `wait` to just wait for the remote call to finish\n- `remotecall_fetch` - the same as `fetch(remotecall(...))`\n- `remotecall_wait` - the same as `wait(remotecall(...))`\n- `remote_do` - like `remotecall`, but does not provide a way to access the result of the call\n- `@spawnat` - like `remotecall`, but in macro form\n- `@spawn` - like `@spawn`, but the target process is picked automatically\n- `@fetch` - macro equivalent of `fetch(@spawn expr)`\n- `@fetchfrom` - macro equivalent of `fetch(@spawnat p expr)`\n- `myid` - returns the `Int` identifier of the process calling it\n- `nprocs` - returns the number of processes in the cluster\n- `nworkers` - returns the number of worker processes in the cluster\n- `procs` - returns the set of IDs for processes in the cluster\n- `workers` - returns the set of IDs for worker processes in the cluster\n- `interrupt` - interrupts the specified process\n\nFor communicating between processes in the style of a channel or stream:\n\n- `RemoteChannel` - a `Channel`-like object that can be `put!` to or `take!` from any process\n\nFor controlling multiple processes at once:\n\n- `WorkerPool` - a collection of processes than can be passed instead a process ID to certain APIs\n- `CachingPool` - like `WorkerPool`, but caches functions (including closures which capture large data) on each process\n- `@everywhere` - runs a block of code on all (or a subset of all) processes and waits for them all to complete\n- `pmap` - performs a `map` operation where each element may be computed on another process\n- `@distributed` - implements a `for`-loop where each iteration may be computed on another process\n\n### Process Identifiers\n\nJulia processes connected with `DistributedNext` are all assigned a\ncluster-unique `Int` identifier, starting from `1`. The first Julia process\nwithin a cluster is given ID `1`, while other processes added via `addprocs` get\nincrementing IDs (`2`, `3`, etc.). Functions and macros which communicate from\none process to another usually take one or more identifiers to determine which\nprocess they target - for example, `remotecall_fetch(myid, 2)` calls `myid()` on\nprocess 2.\n\n**Note:** Only process 1 (often called the \"head\", \"primary\", or \"master\") may\nadd or remove processes, and manages the rest of the cluster. Other processes\n(called \"workers\" or \"worker processes\") may still call functions on each other\nand send and receive data, but `addprocs`/`rmprocs` on worker processes will\nfail with an error.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliaparallel%2Fdistributednext.jl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuliaparallel%2Fdistributednext.jl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliaparallel%2Fdistributednext.jl/lists"}