You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python的concurrent.futures进程池函数中获取用户输入?

问题:ProcessPoolExecutor中调用input()引发EOFError

我尝试运行一个名为function的函数,在其中通过input()获取用户输入并存储到变量string中,函数结束时返回该变量。随后将此函数提交给futures.ProcessPoolExecutor执行,最后打印执行结果。代码如下:

#!/usr/bin/python3

from concurrent import futures

def function():
  string = input("Input: ")
  return string

executor = futures.ProcessPoolExecutor()

process = executor.submit(function)

print(process.result())

问题现象:运行脚本后,出现如下错误,且无法进行输入:

Input: concurrent.futures.process._RemoteTraceback:
"""
Traceback (most recent call last):
  File "/usr/lib/python3.7/concurrent/futures/process.py", line 232, in _process_worker
    r = call_item.fn(*call_item.args, **call_item.kwargs)
  File "./TestScript.py", line 6, in function
    string = input("Input: ")
EOFError: EOF when reading a line
"""

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "./TestScript.py", line 13, in <module>
    print (process.result())
  File "/usr/lib/python3.7/concurrent/futures/_base.py", line 432, in result
    return self.__get_result()
  File "/usr/lib/python3.7/concurrent/futures/_base.py", line 384, in __get_result
    raise self._exception
EOFError: EOF when reading a line

原因分析

ProcessPoolExecutor会创建独立的子进程执行任务,子进程默认不会继承父进程的标准输入(stdin)。当子进程里的input()尝试读取输入时,因为没有可用的输入流,直接触发了EOFError。

解决方案

把用户输入操作放在主进程中完成,再将输入内容作为参数传给子进程的函数,避免在子进程中操作标准输入。修改后的代码如下:

#!/usr/bin/python3

from concurrent import futures

def function(user_input):
  return user_input

# 主进程中获取输入
user_input = input("Input: ")

executor = futures.ProcessPoolExecutor()
process = executor.submit(function, user_input)

print(process.result())

补充说明

  • ProcessPoolExecutor的设计初衷是处理CPU密集型任务,这类任务不需要和用户交互;如果是需要交互的逻辑,直接在主进程执行即可,没必要用进程池。
  • 子进程和主进程拥有完全独立的资源空间,包括标准输入输出流,所以子进程无法直接访问主进程的输入流。

内容的提问来源于stack exchange,提问作者MimisLovesToProgram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:52:44