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

时间:2018-02-23 21:24:12

标签: pycharm python-3.6 type-hinting mypy

我在Python 3.6中编写了一个分形生成器,并使用test来将消息从主线程传递给worker。这是我到目前为止所尝试的,但PyCharm似乎无法推断从队列中取出的项目的属性类型:

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 结果的属性具有self.work.get类指定的类型。我还想知道是否有一种标准的类型暗示队列方式与此类似。

2 个答案:

答案 0 :(得分:4)

老问题,但我刚刚找到

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

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

答案 1 :(得分:2)

TypeVar should have a name.

T = TypeVar("T") fixes the problem.