为什么我的打印功能(在多处理中)什么都不打印?



为什么我的打印函数(在 Python 多进程中(什么都不打印?

from multiprocessing import Process, Queue
import os, time, random

def write(q):
print('Process to write: %s' % os.getpid())
for value in ['A', 'B', 'C']:
print('Put %s to queue...' % value)
q.put(value)
time.sleep(random.random())

def read(q):
print('Process to read: %s' % os.getpid())
while True:
value = q.get(True)
print('Get %s from queue.' % value)
if __name__=='__main__':
q = Queue()
pw = Process(target=write, args=(q,))
pr = Process(target=read, args=(q,))
pw.start()
print('start')
pr.start()
pw.join()
pr.terminate()
print('end')

我在spyder(Windows 10系统(上运行它。

我在Spyder的IPython控制台上的结果:

runfile('C:/Users/Dust/Desktop/programs/crawl/test.py', wdir='C:/Users/Dust/Desktop/programs/crawl')
start
end

Spyder的Python控制台上的结果:

>>> runfile('C:/Users/Dust/Desktop/programs/crawl/test.py', wdir='C:/Users/Dust/Desktop/programs/crawl')
start
Process to write: 12824
Put A to queue...
Put B to queue...
Put C to queue...
end

这真的很奇怪。结果不同,但两者都不是我想要的。

谁能帮我找到我的程序中的问题在哪里。多谢

多处理模块使用fork生成子进程以实现并行性。 Windows没有实现fork,并且在Windows上对它的Python仿真是不完整的。 缺少的效果之一是stdout(由print()使用(不被子进程继承。 相反,子进程使用默认stdout

这在命令窗口中工作正常,因为它使用默认stdout。 这在Spyder中没有显示任何内容,因为使用不同的管道输出到Spyder IPython控制台窗口。

请参阅此问题("Spyder 中的简单多处理函数不输出结果"(和此答案以获取更多详细信息和可能的缓解措施。

相关内容

  • 没有找到相关文章

最新更新