首页 > 解决方案 > 为什么 python 中的 multiprocessing.manager 行为怪异?

问题描述

当我运行它并输入一些内容时,它会进入主函数,但随后又要求输入。为什么会发生这种情况?我在 Windows 中使用命令提示符运行。版本是 3.8

import multiprocessing
from concurrent.futures import ProcessPoolExecutor
import concurrent.futures


input('?')

def pp(id,lock):
    with lock:
        for i in range(5):          
            print(f'{id}=>{i}')

def main():
    pool = ProcessPoolExecutor()
    m = multiprocessing.Manager()
    lock = m.Lock()
    futures = [pool.submit(pp, num,lock) for num in range(10)]
    with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor:
        executor.map(main, list(range(10)),[lock]*10)       
if __name__=='__main__':
    main()  

这是输出:

?abc
?abd
????

如何解决这个问题,让它只运行一次输入?

标签: pythonpython-multiprocessingmainconcurrent.futures

解决方案


我无法重现,它只在我的本地 Python 上运行一次。你的 Python 版本是什么?

但是,我可以建议inputif __name__ == "main". 问题是每当您导入模块时都会调用您的输入,这可以main在导入函数时由线程完成。

注意:很抱歉没有发表评论,但我不能以低于 50 的声誉发表评论。


推荐阅读