Python 在没有 print/logging 进程语句的情况下启动多处理

Python start multiprocessing without print/logging statements from processes

我正在通过多处理启动两个进程,这工作正常。我遇到的唯一问题是来自这两个进程的打印和调试语句。

希望是,使用 REPL 并启动进程,就像在后台一样。但是,我没有得到这个 运行。我总是得到调试语句,因此不能再使用 REPL。这就是我调用流程的方式:

processes = [
    Process(target=start_viewer, args=()),
    Process(target=start_server, args=(live, amount, fg))
] 

for p in processes:
    p.start()

关于如何“静音”进程或让它们进入后台的任何想法?

如果我正确理解您的意思,您不想显示来自其中一个进程的打印。 您可以通过重定向 Python 解释器的输出来实现此目的。 将 sys.stdout = open("/dev/null", 'w') 添加到要“静音”的进程。

下面是完整的工作示例。

from multiprocessing import Process
from time import sleep
import sys


def start_viewer():
    sys.stdout = open("/dev/null", 'w')
    while True:
        print("start_viewer")
        sleep(1)

def start_server():
    while True:
        print("start_server")
        sleep(1)

if __name__ == '__main__':
    processes = [
        Process(target=start_viewer, args=()),
        Process(target=start_server, args=())
    ]

    for p in processes:
        p.start()

请注意,/dev/null 就像将打印件传到无处可去,如果要保存它,可以使用文本文件。另外要实现多 os 支持,您应该使用 os.devnull.