繁体   English   中英

Python 检查 isinstance multiprocessing.Manager().Queue()

[英]Python check isinstance multiprocessing.Manager().Queue()

我在 windows 7 上使用 python 2.7 多处理:

import multiprocessing as mp
from Queue import Queue
from multiprocessing.managers import AutoProxy

if __name__ == '__main__':
    manager = mp.Manager()
    myqueue = manager.Queue()

    print myqueue
    print type(myqueue)
    print isinstance(myqueue, Queue)
    print isinstance(myqueue, AutoProxy)

Output:

<Queue.Queue instance at 0x0000000002956B08>
<class 'multiprocessing.managers.AutoProxy[Queue]'>
False
Traceback (most recent call last):
  File "C:/Users/User/TryHere.py", line 12, in <module> print 
  isinstance(myqueue, AutoProxy) TypeError: isinstance() arg 2 must be a 
  class, type, or tuple of classes and types

我的问题是:我想检查一个变量是否是一个多处理队列的实例,我应该如何检查 go?

我已经提到:

检查 Python multiprocessing.Connection 的实例?

访问 class 的多处理代理的属性

但他们似乎没有解决我的问题。 提前致谢!

问题 :我想检查变量是否是多处理队列的实例,我应该如何检查?

它是一个Proxy对象, multiprocessing.managers.BaseProxy确实匹配:

from multiprocessing.managers import BaseProxy
print(isinstance(myqueue, BaseProxy))
>>>True

使用Python测试:3.4.2和2.7.9

这是我的工作:

import multiprocessing as mp
my_queue = mp.Queue()
print(type(my_queue) == type(mp.Queue()))
>>>True

对于Python 3.6,等效项为

import multiprocessing
test_queue = multiprocessing.Queue()
type(test_queue) == multiprocessing.queues.Queue:
>>> True

我们可以选择不对@mikeye提议的新创建的Queue对象执行类型检查。

对于 Python 3.10,我们可以使用queues命名空间下的 Queue,同时仍然使用isinstance()

import multiprocessing as mp
my_q = mp.Queue()
isinstance(my_q, mp.queues.Queue)
>>> True

import asyncio
isinstance(my_q, asyncio.Queue)
>>> False

import queue
isinstance(my_q, queue.Queue)
>>> False

我知道这并不完全涵盖原始问题,但由于错误与仅使用mp.Queue而不是mp.queues.Queue的错误大致相同,我想我会添加这个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM