在 Python3.6(尤其是 PyCharm)中键入提示同构队列的正确方法是什么?

What is the correct way to type hint a homogenous Queue in Python3.6 (especially for PyCharm)?

我正在 Python 3.6 中编写一个分形生成器,我使用 multiprocessing.Queues 将消息从主线程传递给工作线程。到目前为止,这是我尝试过的方法,但是 PyCharm 似乎无法推断从队列中获取的项目的属性类型:

from typing import NamedTuple, Any, Generic, TypeVar, Tuple
from multiprocessing import Process, Queue

T = TypeVar()


class Message(NamedTuple):
    method: str
    id: str
    data: Any = None


class TypedQueue(Generic[T]):
    def get(self) -> T:
        ...
    def put(self, m: T) -> None:
        ...


MessageQ = TypedQueue[Message]


class FractalWorker(Process):
    def __init__(self, work: MessageQ, results: MessageQ)
        super().__init__()
        self.work = work
        self.results = results

    @staticmethod
    def make_queues() -> Tuple[MessageQ, MessageQ]:
        work = cast(MessageQ, Queue())
        results = cast(MessageQ, Queue())
        return work, results

我希望 PyCharm 能够判断 self.work.get 结果的属性具有 Message class 指定的类型。我也想知道是否有类似于此的类型提示队列的标准方法。

TypeVar应该有个名字。

T = TypeVar("T") 修复了问题。

老问题,但我刚找到

P: "Queue[Path]" = Queue()

在 PyCharm

中与 queue.Queuemultiprocessing.Queue 一起工作