我正在Python 3.6中编写一个分形生成器,并且使用multiprocessing.Queue将消息从主线程传递给工作程序。到目前为止,这是我尝试过的方法,但是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")解决了该问题。

10-01 13:19