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

时间:2017-09-15 03:02:24

标签: python multiprocessing

我在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)

输出:

<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

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

我提到过:

Check for instance of Python multiprocessing.Connection?

Accessing an attribute of a multiprocessing Proxy of a class

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

3 个答案:

答案 0 :(得分:2)

  

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

这是一个代理对象,multiprocessing.managers.BaseProxy匹配:

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

使用Python测试:3.4.2和2.7.9

答案 1 :(得分:0)

这就是我要做的:

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

答案 2 :(得分:0)

对于Python 3.6,等效值为

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

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