From: Tony Yu <ts...@gm...> - 2012-07-07 19:00:38
|
On Tue, Jul 3, 2012 at 11:18 AM, Ryan May <rm...@gm...> wrote: > On Tue, Jul 3, 2012 at 10:03 AM, Tony Yu <ts...@gm...> wrote: > > > > > > On Tue, Jul 3, 2012 at 10:22 AM, Ryan May <rm...@gm...> wrote: > >> > >> On Tue, Jul 3, 2012 at 9:14 AM, Tony Yu <ts...@gm...> wrote: > >> > On Mon, Jul 2, 2012 at 11:42 PM, Tony Yu <ts...@gm...> wrote: > > >> >> I finally had some time to revisit this issue. It seems that > subprocess > >> >> PIPEs have fairly limited buffers [1] (also see docs for > >> >> `subprocess.Popen.communicate` [2]) and ffmpeg tends to generate a > >> >> decent > >> >> amount of output to stderr. A simple solution is to redirect stderr > to > >> >> a > >> >> temporary file. This change fixes the issue on my system. > >> >> > >> >> If this bug is reproducible, I can submit a PR. The temporary file > here > >> >> could be created using tempfile so it gets cleaned up automatically, > or > >> >> maybe a more permanent log file for debugging. Thoughts? > >> >> > >> >> -Tony > >> >> > >> >> [1] > >> >> > >> >> > http://thraxil.org/users/anders/posts/2008/03/13/Subprocess-Hanging-PIPE-is-your-enemy/ > >> >> > >> >> [2] > >> >> > >> >> > http://docs.python.org/library/subprocess.html#subprocess.Popen.communicate > >> >> > >> > > >> > And just to clarify: My original email mentioned that saving would > hang > >> > only > >> > when `streamplot` was used to create the figure. It turns out that > >> > ffmpeg > >> > prints more output (keyframes?) for more complex images, so when I ran > >> > simpler plots, they didn't produce enough output to fill the > subprocess > >> > `PIPE` (although they would eventually). > >> > > >> > Also, theres's a simpler fix than piping ffmpeg output to a file: Just > >> > set > >> > `-loglevel quiet` in the ffmpeg command. > >> > > >> > -Tony > >> > >> It's not a bad idea to have it logged to a file in a temp directory. > >> We could potentially just do this if debug is set to verbose, however, > >> and just use -loglevel quiet otherwise. Can you manage PR for this or > >> do I need to? > >> > >> Ryan > >> > > > > Hey Ryan, > > > > If you have time, that'd be great. Otherwise, I should have some time at > the > > end of the week to submit a PR. > > > > -Tony > > > > I might be able to squeeze it in. If you don't see anything by the end > of the week, hit me up. > > Ryan > > Hey Ryan, I didn't see a PR for this issue, so I just added a fix: https://github.com/matplotlib/matplotlib/pull/989 As mentioned before, the PR suppresses logging in ffmpeg under normal circumstances. When the verbosity level is set to debug, however, the subprocess output (stdout + stderr) are piped to `sys.stdout`. This is where verbose reports are posted, so I figured that was the best place (oh, actually, I guess could have piped to `verbose.fileo`). If you feel the debug output should go to a file instead, let me know. Cheers, -Tony |