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

Bro*_*eph 6 type-hinting pycharm python-3.6 mypy

我正在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
Run Code Online (Sandbox Code Playgroud)

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

小智 23

老问题,但我刚刚发现

P: "Queue[Path]" = Queue()
Run Code Online (Sandbox Code Playgroud)

在 PyCharm 中同时使用queue.Queuemultiprocessing.Queue使用


use*_*698 3

TypeVar应该有一个名字。

T = TypeVar("T")解决问题。