gpt4 book ai didi

python - Spyder 中的简单 Python 多处理函数不输出结果

转载 作者:太空宇宙 更新时间:2023-11-03 13:41:43 24 4
gpt4 key购买 nike

我这里有一个非常简单的函数,我试图在其中运行和测试,但是,它没有输出任何内容,也没有任何错误。我已经多次检查代码,但没有任何错误。

我打印了作业,这是我得到的:

[<Process(Process-12, stopped[1])>, 
<Process(Process-13, stopped[1])>,
<Process(Process-14, stopped[1])>,
<Process(Process-15, stopped[1])>,
<Process(Process-16, stopped[1])>]

代码如下:

import multiprocessing

def worker(num):
print "worker ", num
return

jobs = []
for i in range(5):
p = multiprocessing.Process(target = worker, args = (i,))
jobs.append(p)
p.start()

这是我期待的结果,但它没有输出任何东西:

Worker: 0
Worker: 1
Worker: 2
Worker: 3
Worker: 4

最佳答案

评论显示 OP 使用 Windows 以及 Spyder。由于 Spyder 重定向 stdout 而 Windows 不支持 forking ,新的子进程不会打印到 Spyder 控制台。这仅仅是因为新子进程的 stdout 是 Python 的 vanilla stdout,它也可以在 sys.__stdout__ 中找到。

有两种选择:

  1. 使用 logging模块。这将包括创建所有消息并将其记录到一个或多个文件中。使用单个日志文件可能会导致输出出现轻微乱码的问题,因为进程会同时写入文件。每个进程使用一个文件可以解决这个问题。

  2. 在子进程中不使用print,只是将结果返回给主进程。通过使用 queue (或 multiprocessing.Manager().Queue() 因为 fork 是不可能的)或更简单地依靠 multiprocessing Pool's map 功能,请参见下面的示例。

带池的多处理示例:

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()

关于python - Spyder 中的简单 Python 多处理函数不输出结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29629103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com