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
.
我正在通过多处理启动两个进程,这工作正常。我遇到的唯一问题是来自这两个进程的打印和调试语句。
希望是,使用 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
.