Child processes created with python multiprocessing module won't print

前端 未结 4 1328
情歌与酒
情歌与酒 2020-11-27 08:12

I have a problem with the code below, and with any code that uses the print function in the child processes. I can\'t see any printed statements, even if I use

相关标签:
4条回答
  • 2020-11-27 08:34

    Try this:

    from multiprocessing import Process
    import sys
    
    def f(name):
        print 'hello', name
        sys.stdout.flush()
    
    ...
    

    AFAIK the standard output of processed spawned by the multiprocessing module is buffered, hence you will see the output only if the buffer becomes full or you explicitly flush sys.stdout.

    0 讨论(0)
  • 2020-11-27 08:37

    Having run into this issue myself, sometimes this can be because the child process is actually silently failing before ever getting to the print statement. If this is the case, wrapping the child process code in a try-except block and returning the exception object (to be printed in the parent process) is an effective way to debug this.

    0 讨论(0)
  • 2020-11-27 08:45

    I was using PyCharm IDE, and by checking the "Emulate terminal in output console" field in Run/Debug Configurations, it printed the desired result.

    Hope it helps if you're using PyCharm.

    0 讨论(0)
  • 2020-11-27 08:54

    The docs for multiprocessing clearly explain why this won't work!

    "Note: Functionality within this package requires that the __main__ method be importable by the children. This is covered in Programming guidelines however it is worth pointing out here. This means that some examples, such as the multiprocessing.Pool examples will not work in the interactive interpreter."

    0 讨论(0)
提交回复
热议问题