我正在使用Python 3.6编写一个分形生成器,并且我使用来在主线程和工作线程之间传递消息。目前我尝试了以下方法,但是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
类指定。我也想知道是否有一种类似于此的标准方法来提示队列的类型。
Path
应该是一个TypeVar
吗,@Xtrem532?还是其他什么东西? - Intrastellar ExplorerP
的队列,其中包含pathlib.Path
对象。 - Xtrem532import multiprocessing
才能通过mypy。 - Ben Butterworth