如何在Python multiprocessing库中正确访问ApplyResult与Event类型
解决multiprocessing类型提示的两个问题
1. 正确访问ApplyResult[_T]类型
直接通过multiprocessing.pool.ApplyResult访问会触发AttributeError,原因是multiprocessing模块默认不会自动导入pool子模块。有两种解决方式:
方式一:显式导入pool子模块
import multiprocessing import multiprocessing.pool # 必须先导入该子模块,才能通过mp.pool访问 from typing import TypeVar _T = TypeVar("_T") def handle_result(result: multiprocessing.pool.ApplyResult[_T]) -> _T: return result.get()
方式二:直接从子模块导入ApplyResult
from multiprocessing.pool import ApplyResult from typing import TypeVar _T = TypeVar("_T") def handle_result(result: ApplyResult[_T]) -> _T: return result.get()
2. 正确使用Event作为类型注解
multiprocessing.Event本身是合法类型,但mypy提示无效通常是因为类型存根识别问题,直接导入Event并作为类型使用即可:
示例代码
from multiprocessing import Event def trigger_event(event: Event) -> None: event.set()
如果是通过multiprocessing模块访问,确保代码中已导入multiprocessing,并直接用multiprocessing.Event作为注解:
import multiprocessing def reset_event(event: multiprocessing.Event) -> None: event.clear()
额外说明
如果mypy仍提示错误,检查是否安装了最新版的mypy——通常mypy自带标准库类型存根,更新版本即可解决大部分类型识别问题。
内容的提问来源于stack exchange,提问作者QweryBot
相关产品推荐
相关产品推荐

