python - 为什么 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
????
如何解决这个问题,让它只运行一次输入?
解决方案
我无法重现,它只在我的本地 Python 上运行一次。你的 Python 版本是什么?
但是,我可以建议input
将if __name__ == "main"
. 问题是每当您导入模块时都会调用您的输入,这可以main
在导入函数时由线程完成。
注意:很抱歉没有发表评论,但我不能以低于 50 的声誉发表评论。
推荐阅读
- python - 为什么我不能从 Pydantic 导入 BaseModel?
- express - Express Validator - 只允许字母、数字和一些特殊字符
- linux - 如何修复内核模块中的“未知符号 usb_create_hcd (err -2)”(linux-image-cloud-amd64 内核)
- python - Python Flask 抛出 404 URL 未找到
- typescript - Cypress/TypeScript 和可选或未定义的方法参数
- gnuplot - 使用 gnuplot 进行线性拟合会产生不正确的结果?
- python - Python:运行 Slooooow 的程序
- python - 遍历 csv 文件中的值并创建目录
- python - 如何在 mega.py 中保存登录会话?
- django - 如何正确验证 ModelForm(最佳实践)?