[Baypiggies] multithreading question

Shannon -jj Behrens jjinux at gmail.com
Thu Sep 18 08:55:11 CEST 2008


I think the easiest thing to do is:

from __future__ import with_statement
import threading

# This is to protect stdout and stderr.

output_lock = threading.Lock()


def printf(s, file=sys.stdout):
    """Print s to file and then flush it.

    This function uses output_lock so that all writes to stdout and
    stderr are synchronized.

    Note, the caller is responsible for adding the newline.

    """
    with output_lock:
        file.write(s)
        file.flush()


I looked into using the logging module, but it turns out that the one
place I write to stdout is via the csv module:

        with output_lock:
            writer.writerow(row)
            sys.stdout.flush()

Hence, I use printf instead of print, and I explicitly manage a lock
in the one place where I can't use printf.

-jj


More information about the Baypiggies mailing list