Skip to content

How to use context.run(asynchronous=True) for many tasks #892

Open

Description

@adamcunnington-mlg

Hi, a usage question as the docs are quite lite on this topic.

If I want to make 5 context.run() calls concurrently but I don't want to complete execution of my function until they have all finished, is there something more elegant than this:

class AggregateError(Exception): 
    pass

running = [context.run(foo, async=True), context.run(bar, async=True), context.run(baz, async=True)]

while running:
    for promise, index in enumerate(running[:]):
        ....

Activity

  1. adamcunnington commented on Dec 11, 2022

    @adamcunnington

    Is this project dead?

  2. kuwv commented on Dec 16, 2022

    @kuwv
    Contributor

    @adamcunnington no the project is still maintained. The BDFL unfortunately is stretched thin.

    Sorry, I don't have the answer you need at the moment though.

  3. paw-lu commented on Jan 17, 2023

    @paw-lu

    @adamcunnington

    I think you might be able to use .join here?

    Example

    running = [  # Launch jobs
        context.run(foo, async=True),
        context.run(bar, async=True),
        context.run(baz, async=True),
    ]
    
    for promise in running:  # This block won't complete until all jobs finish
        running.join()
  4. paw-lu commented on Jan 17, 2023

    @paw-lu
  5. adamcunnington commented on Jan 19, 2023

    @adamcunnington

    Thanks for this! I had seen the API docs for that method but hadn't quite understood how to use it in the case of multiple jobs - but now see from your code snippet that it's embarrassingly simple! Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions