我在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
类指定的类型。我还想知道是否有一种标准的类型暗示队列方式与此类似。
答案 0 :(得分:4)
老问题,但我刚刚找到
P: "Queue[Path]" = Queue()
可以同时在PyCharm中使用queue.Queue
和multiprocessing.Queue
答案 1 :(得分:2)
TypeVar
should have a name.
T = TypeVar("T")
fixes the problem.