我正在用Python 3.6编写一个分形生成器,我使用multiprocessing.Queue
s将消息从主线程传递到工作线程,这是我目前为止尝试过的方法,但是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
类指定的类型,我还想知道是否有类似的类型提示Queues的标准方法。
3条答案
按热度按时间hyrbngr71#
老问题了但我刚发现
在PyCharm中同时使用
queue.Queue
和multiprocessing.Queue
j91ykkif2#
TypeVar
应该有一个名称。T = TypeVar("T")
修复了该问题。svujldwt3#
@Xtrem532的答案对我有效,但如果您不希望类型为字符串,请导入
annotations
:我不得不使用
multiprocessing.queues.Queue
来让pylint通过。