python无法输出结果是_Spyder中的简单Python多处理函数不输出结果

本文讨论了在Windows环境下使用Spyder时遇到的打印问题,详细解释了由于Spyder重定向stdout和Windows不支持forking导致子进程无法在控制台打印输出的原因。提供了两种解决方案:一是使用logging模块记录日志;二是通过multiprocessing Pool实现多进程处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

评论显示,OP使用Windows和Spyder。由于Spyder重定向stdout,并且Windows不支持forking,因此新的子进程不会打印到Spyder控制台中。这只是因为新子进程的stdout是Python的普通标准输出,也可以在sys.__stdout__中找到。

有两种选择:使用logging模块。这将包括创建所有消息并将其记录到一个或多个文件中。使用单个日志文件可能会导致输出有点混乱,因为进程会并发地写入该文件。每个进程使用一个文件可以解决这个问题。

不是在子进程中使用print,而是简单地将结果返回到主进程。或者使用queue(或者multiprocessing.Manager().Queue(),因为不可能分叉),或者更简单地依赖multiprocessing Pool'smap功能,请参见下面的示例。

池的多处理示例:import multiprocessing

def worker(num):

"""Returns the string of interest"""

return "worker %d" % num

def main():

pool = multiprocessing.Pool(4)

results = pool.map(worker, range(10))

pool.close()

pool.join()

for result in results:

# prints the result string in the main process

print(result)

if __name__ == '__main__':

# Better protect your main function when you use multiprocessing

main()

哪个打印(在主要过程中)worker 0

worker 1

worker 2

worker 3

worker 4

worker 5

worker 6

worker 7

worker 8

worker 9

编辑:如果您迫不及待地等待map函数完成,可以使用imap_unordered并稍微更改命令的顺序,立即打印结果:def main():

pool = multiprocessing.Pool(4)

results = pool.imap_unordered(worker, range(10))

for result in results:

# prints the result string in the main process as soon as say are ready

# but results are now no longer in order!

print(result)

# The pool should join after printing all results

pool.close()

pool.join()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值