您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

有两种选择:

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

不在print子进程中使用,而只是将结果返回给主进程。通过使用队列(或multiprocessing.Manager().Queue()因为不可能进行分叉)或更简单地依靠多处理池的 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 2022/1/1 18:38:10 有247人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶