在Python3.6中输入同质队列的正确方法是什么(特别是对于PyCharm)?

在Python3.6中输入同质队列的正确方法是什么(特别是对于PyCharm)?,pycharm,python-3.6,type-hinting,mypy,Pycharm,Python 3.6,Type Hinting,Mypy,我正在用Python3.6编写一个分形生成器,我使用multiprocessing.Queues将消息从主线程传递给工作线程。这是我到目前为止尝试过的,但PyCharm似乎无法推断从队列中获取的项目的属性类型: from typing import NamedTuple, Any, Generic, TypeVar, Tuple from multiprocessing import Process, Queue T = TypeVar() class Message(NamedTuple

我正在用Python3.6编写一个分形生成器,我使用
multiprocessing.Queue
s将消息从主线程传递给工作线程。这是我到目前为止尝试过的,但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
类指定的类型。我还想知道是否有类似于此的标准类型暗示队列。

TypeVar
应该有一个名称


T=TypeVar(“T”)
解决了这个问题。

老问题,但我刚刚发现

P:“队列[路径]”=Queue()

要同时使用PyCharm中的
queue.queue
multiprocessing.queue
Path
在这里@Xtrem532应该是
TypeVar
吗?或者别的什么?iirc这是一个名为
P
holding
pathlib.Path
objects的队列