Skip to content

Commit

Permalink
feat(cli): add -n to execute a certain number of tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
william-silversmith committed Jan 31, 2024
1 parent 2db531c commit da3f58c
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions igneous_cli/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -759,11 +759,12 @@ def ccl_auto(
@click.option('--min-sec', default=-1, help='Execute for at least this many seconds and quit after the last task finishes. Special values: (0) Run at most a single task. (-1) Loop forever (default).', type=float)
@click.option('-q', '--quiet', is_flag=True, default=False, help='Suppress task status messages.', show_default=True)
@click.option('-x', '--exit-on-empty', is_flag=True, default=False, help="Exit immediately when the queue is empty. Not reliable for SQS as measurements are approximate.", show_default=True)
@click.option('-n', '--num-tasks', type=int, default=-1, help="Process this many tasks. Use -1 to indicate no limit.", show_default=True)
@click.pass_context
def execute(
ctx, queue, aws_region,
lease_sec, tally, min_sec,
exit_on_empty, quiet
exit_on_empty, quiet, num_tasks,
):
"""Execute igneous tasks from a queue.
Expand All @@ -774,7 +775,7 @@ def execute(
See https://github.com/seung-lab/python-task-queue
"""
parallel = int(ctx.obj.get("parallel", 1))
args = (queue, aws_region, lease_sec, tally, min_sec, exit_on_empty, quiet)
args = (queue, aws_region, lease_sec, tally, min_sec, exit_on_empty, quiet, num_tasks)
parallel_execute_helper(parallel, args)

def parallel_execute_helper(parallel, args):
Expand All @@ -796,7 +797,7 @@ def parallel_execute_helper(parallel, args):
def execute_helper(
queue, aws_region, lease_sec,
tally, min_sec, exit_on_empty,
quiet
quiet, num_tasks,
):
tq = TaskQueue(normalize_path(queue), region_name=aws_region)

Expand Down Expand Up @@ -832,10 +833,13 @@ def is_empty():
else:
return tq.is_empty()

def stop_after_elapsed_time(tries, elapsed_time):
def stop_after_elapsed_time(tries, executed, elapsed_time):
if exit_on_empty and is_empty():
return True

if num_tasks >= 0 and executed >= num_tasks:
return True

if min_sec < 0:
return False
return min_sec < elapsed_time
Expand Down

0 comments on commit da3f58c

Please sign in to comment.