Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re^6: Long Process Waits Until End to Display Results

by C_T (Scribe)
on Dec 13, 2004 at 19:54 UTC ( [id://414523]=note: print w/replies, xml ) Need Help??


in reply to Re^5: Long Process Waits Until End to Display Results
in thread Long Process Waits Until End to Display Results

Hopefully this group of code snips will show you what is going on.

The first part is where I create the fork. The second part is the lengthy process (one of them). The third part is how I display the results so far as processing is ongoing.

It works fine, except it waits until createCommandFiles() is done before displaying the results instead of displaying the results so far.

my $session = getSessionID(); my $cache = getCacheHandle(); $cache->set($session, [0, $buffer]); #===== Fork off a child process to do the processing if (my $pid = fork) { delete_all(); # get rid of old parameters param('session', $session); print redirect(self_url()); } elsif (defined($pid)) { close STDOUT; open (STDOUT, "-|"); #===== Make the command files $buffer .= "<strong>Creating command files...</strong><br>"; $cache->set($session, [0, $buffer]); createCommandFiles($cache); $buffer .= "<strong>Done creating command files.</strong><p>"; $cache->set($session, [1, $buffer]); } # if the pid is defined sub createCommandFiles($) { my $cache = shift or die "Must supply cache to getVersionReports()!\n"; #===== Change directory to our directory chdir($file_dir) or die "Couldn't chdir to $file_dir"; #===== Make each command file foreach my $device (@selected_devices_array) { my $command = "$mkcmdfile -t \"$device\""; system($command) and die "Could not run command $command : $!"; $buffer .= "Created command file for $device.<br>"; #===== Update the display cache $cache->set($session, [0, $buffer]); } } # end of createCommandFiles() #=================================================================== # D I S P L A Y R E S U L T S #=================================================================== sub displayPushResults($) { my $session = shift or die "Must supply session id to displayPushResults()!\n"; my $cache = undef; my $data = undef; #===== Get a cache handle $cache = getCacheHandle(); #===== Get the session info $data = $cache->get($session); #===== Check validity of session die "Could not reconnect to your session!\n" unless ($data and ref $ +data eq 'ARRAY'); #===== Write the header print "Content-type: text/html\n\n"; print "<html>\n"; print "<head>\n"; print "<title>CodePusher.cgi</title>\n"; print "<meta http-equiv=refresh content=5>\n" if (!($data->[0])); print "</head>\n"; print "<body>\n"; AantsHtml::printUWHeader(); #===== Title print "<center><h1>Results</h1></center>\n"; print "<p><p>\n"; #===== Print the results print "$data->[1]"; if (!$data->[0]) { print "<p><font color=red>Still processing... please wait!</font>< +br>"; } # if the code push is not done yet } # displayPushResults()
CT
Charles Thomas
Madison, WI

Replies are listed 'Best First'.
Re^7: Long Process Waits Until End to Display Results
by traveler (Parson) on Dec 13, 2004 at 20:42 UTC
    At least you need the equivalent of CGI's end_html (probably </body></html>) aat then end of displayPushResults per merlyn's example. Try that first. (Presumably you invoke displayPushResults when you get a session with a key.)
      There's other code which writes the footer and closes that stuff out.

      In any case, I don't believe the absense of a close-body or close-html tag would prevent the display from only being updated when the subroutine finishes.

      CT

      Charles Thomas
      Madison, WI

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://414523]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (6)
As of 2024-04-23 11:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found