评论显示OP和Spyder都使用Windows。由于Spyder重定向
stdout并且Windows不支持分支,因此新的子进程将不会打印到Spyder控制台中。这完全是由于
stdout新的子进程是Python的香草标准输出,也可以在中找到
sys.__stdout__。
有两种选择:
使用日志记录模块。这将包括创建所有消息并将其记录到一个或几个文件中。使用单个日志文件可能会导致以下问题:由于进程将同时写入文件,因此输出会出现一些乱码。每个进程使用一个文件可以解决此问题。
不在
print
子进程中使用,而只是将结果返回给主进程。通过使用队列(或multiprocessing.Manager().Queue()
因为不可能进行分叉)或更简单地依靠多处理池的map
功能,请参见下面的示例。
带有池的多处理示例:
import multiprocessingdef worker(num): """Returns the string of interest""" return "worker %d" % numdef 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 0worker 1worker 2worker 3worker 4worker 5worker 6worker 7worker 8worker 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()



