Multiprocessing Process locking up forever in PyCharm

Viewed 1166

I've been having an odd issue with PyCharm and subprocesses created by the multiprocessing library locking up forever. I'm using Windows with Python 3.5. What I'm trying to do is:

  1. Start a background thread to block on stdin (waiting for input)
  2. Have the main thread check occasionally for input from stdin and then delegate the work to Python processes created using multiprocessing

However, I've found that newly created multiprocessing Processes lock up forever if and only if the following conditions are met:

  1. I'm running the code via Pycharm (both the latest and older versions)
  2. The background thread is blocking on stdin

Here's the simplest example I can create that reproduces the problem:

import multiprocessing
import threading
import sys


def noop():
    pass


def consume():
    while True:
        sys.stdin.readline()


if __name__ == '__main__':
    # create a daemon thread to block on stdin
    thread = threading.Thread(target=consume, daemon=True)
    thread.start()

    # create a background process
    process = multiprocessing.Process(target=noop)
    process.start()

I've Googled various combinations of "PyCharm stdin multiprocessing hang ..." and had no luck at finding an explanation, and I can't figure out why a thread of the main process blocking on stdin should ever cause a subprocess to also block/hang, let alone why it would only happen when running the script in PyCharm. The only think I can guess is that there might be some monkey-patching of either stdin or the multiprocessing library going on.

Has anyone else encountered this problem? Can anyone explain to me why this only occurs in PyCharm, and how I can make it work regardless of the Python editor I'm using?

1 Answers
Related