in reply to Status of long running module call

Where do you want to display the status? If you have a web UI you would be better off using the display layer to show a progress bar or similar: there are tons of ways to do that using Ajax requests, for example.

If you want to display the progress in a terminal in which you're running the program, you could simply print the name of each bucket as you initiate the fetch, or you could look at a module such as Term::ProgressBar.

Or you could use some form of IPC, for example a MCE::Shared variable and a forked process, as you mentioned.

But it's unclear to me not only where you want to display the progress, but also why you would need to. You may want to change your storage design if you find that you do. If your bucket has many keys, it's going to take a while to fetch them all, especially since list_all() likely involves multiple S3 requests. If you need to iterate through your keys on a regular basis, consider implementing an index of some kind, e.g. a key that holds a list of other key names.

Hope this helps!


The way forward always starts with a minimal test.

Replies are listed 'Best First'.
Re^2: Status of long running module call
by dayton (Acolyte) on Jul 05, 2017 at 15:09 UTC
    Thanks for the reply... It's a terminal, and I'm fine with actually displaying the results once the bucket is listed... what I'm struggling with is just some kind of status (a spinner or messages like "still working", please wait) while the Amazon::S3 call is being processed.. I have a few spinner routines I've used before, but I just can't get them to work in this case something like
    $bucket = $s3->bucket($b) or die $s3->err . ": " . $s3->errstr; print "\nGetting contents of S3 bucket: [$b] \n\tThis might take a + while...\n\n"; while ( ! @{ $response->{keys} } ){ $response = $bucket->list_all or die $s3->err . ": " . $s3->er +rstr; #please wait status } # display bucket contents
    A reply falls below the community's threshold of quality. You may see it by logging in.