Joh*_*ohn 18 python printing multiprocessing
我有下面的代码的问题,以及print在子进程中使用该函数的任何代码.我看不到任何印刷的陈述,即使我用sys.std[err|out].write('worker')而不是print.
这是代码(来自官方python文档):
from multiprocessing import Process
def f(name):
print 'hello', name
if __name__ == '__main__':
p = Process(target=f, args=('bob',))
p.start()
p.join()
Run Code Online (Sandbox Code Playgroud)
输出为空白.
注意:以下代码使用线程模块并打印输出:
import threading
def f(name):
print 'hello', name
if __name__ == '__main__':
p = threading.Thread(target=f, args=('bob',))
p.start()
p.join()
Run Code Online (Sandbox Code Playgroud)
输出:hello bob
你能指点我解决方案吗?提前致谢.
Tam*_*más 28
试试这个:
from multiprocessing import Process
import sys
def f(name):
print 'hello', name
sys.stdout.flush()
...
Run Code Online (Sandbox Code Playgroud)
AFAIK multiprocessing模块生成的处理标准输出是缓冲的,因此只有缓冲区变满或显式刷新时才会看到输出sys.stdout.
我自己也遇到过这个问题,有时这可能是因为子进程实际上在到达打印语句之前默默地失败了。如果是这种情况,将子进程代码包装在 try-except 块中并返回异常对象(将在父进程中打印)是调试此问题的有效方法。
| 归档时间: |
|
| 查看次数: |
27375 次 |
| 最近记录: |