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

3

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

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

我已经参考了以下内容:

检查Python多进程连接的实例?

访问多进程类代理的属性

但它们似乎没有解决我的问题。先谢谢了!

4个回答

4

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

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

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

已测试使用Python:3.4.2和2.7.9


1
对于Python 3.6,相应的代码为:
import multiprocessing
test_queue = multiprocessing.Queue()
type(test_queue) == multiprocessing.queues.Queue:
>>> True

我们可以选择不对新创建的队列对象执行类型检查,正如@mikeye提出的那样。

0
在Python 3.10中,我们可以使用queues命名空间下的队列,同时仍然使用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几乎相同,所以我想添加这个。


0

这是我的做法:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接