栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spyder中的简单Python多重处理功能不会输出结果

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spyder中的简单Python多重处理功能不会输出结果

评论显示OP和Spyder都使用Windows。由于Spyder重定向

stdout
并且Windows不支持分支,因此新的子进程将不会打印到Spyder控制台中。这完全是由于
stdout
新的子进程是Python的香草标准输出,也可以在中找到
sys.__stdout__

有两种选择:

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

  2. 不在

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/650720.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号