DanEllison has asked for the wisdom of the Perl Monks concerning the following question:
I'm using Strawberry Perl in a Windows 8 environment. I have a scheduler I have written in Perl that I have been using for a couple of years. Its a threaded application that runs more than 1500 jobs every night, so its doing a lot of the same thing over and over.
The main engine spawns worker threads to run the individual jobs and reports some progress to STDOUT. I have had issues in the past where STDOUT would somehow get corrupted and the engine would stop reporting progress but continue to run and I would eventually find my progress messages in one of the job log files.
I haven't seen that issue in a while, but lately I find the engine has simply hung. It writes messages to both STDOUT and to a log file, and I've been adding debugging left and right, and it simply appears to be hanging on prints to STDOUT.
Autoflush is on and I can see single character updates, but here's an example:
$_[0] is the message I want to print. I thought maybe I was hanging trying to get the local time, but no. I put the < and > prints on either side of the localtime, but it hung between the > and the printf of the message.sub message { if ($options{verbose} && $options{verbose} >= ($_[1] || 0)) { if ($inprogress) { print "\n"; $inprogress = 0; } print "<"; my @time = localtime; print ">"; printf "%04d-%02d-%02d %02d:%02d:%02d %s\n", $time[5] + 1900, $time[4] + 1, $time[3], $time[2], $time[1], $time[0], $_[0]; } }
Has anyone had experience with this?
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Hang on STDOUT
by BrowserUk (Patriarch) on Jul 02, 2015 at 13:27 UTC | |
by DanEllison (Scribe) on Jul 02, 2015 at 13:53 UTC | |
by BrowserUk (Patriarch) on Jul 02, 2015 at 14:09 UTC | |
by marioroy (Prior) on Dec 28, 2020 at 22:58 UTC | |
by DanEllison (Scribe) on Jul 02, 2015 at 16:47 UTC | |
by BrowserUk (Patriarch) on Jul 02, 2015 at 17:25 UTC | |
Re: Hang on STDOUT
by graff (Chancellor) on Jul 02, 2015 at 23:16 UTC |