python-3.x – 多处理队列子类问题

前端之家收集整理的这篇文章主要介绍了python-3.x – 多处理队列子类问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想将multiprocessing.Queue子类化,以实现抓取队列块的进程.唯一的问题是,我得到一个奇怪的TypeError?
#!/usr/bin/env python

#whaaaaa!?

from multiprocessing import Queue

class BufferQueue(Queue):
    '''A thread/process safe queue for append/popleft operations with the import
    buffer.'''

    def __init__(self,**kwargs):
        super(BufferQueue,self).__init__(**kwargs)

    def consume(self,lim):
        '''Consume up to but no more than lim elements and return them in a new
        list,cleaning up the buffer.

        @params
        lim -- the maximum (limit) to consume from the list.  If less items
        exist in the list then that's fine too.
        '''
        lim = len(queue) if len(queue) < lim else lim
        return [self.popleft() for i in range(lim)]

测试这个(我将其拆分,以便我不会拉其他任何东西)

| => ./tests/wtf_queue.py 
Traceback (most recent call last):
  File "./tests/wtf_queue.py",line 10,in <module>
    class BufferQueue(Queue):
TypeError: method expected 2 arguments,got 3

编辑/更新:

解决方法

multiprocessing.Queue是一个创建队列的方法,因此您应该将其用作函数my_queue = Queue().
>>> from multiprocessing import Queue
>>> type(Queue)
<class 'method'>

正如您所看到的,不是“类型”,您将使用它来进行子类化.

如果要实现自己的队列,可以查看queue.Queue

编辑:

如果要从多处理子类化队列,请改用multiprocessing.queues.Queue,这是multiprocessing.Queue()返回的对象的类型.

原文链接:https://www.f2er.com/python/242019.html

猜你在找的Python相关文章