属性错误:"队列"对象没有属性"task_done"



谁能解释为什么我会遇到以下错误?

我正在使用Python 3.4

Exception in thread Thread-5:
Traceback (most recent call last):
  File "/usr/lib/python3.4/threading.py", line 920, in _bootstrap_inner
    self.run()
  File "/home/arron/Downloads/Snomed/worker/neo4j_upload_worker.py", line 36, in run
    self.queue.task_done()
AttributeError: 'Queue' object has no attribute 'task_done'

代码

from queue import Queue
from threading import Thread
import time

class Neo4jUploadWorker(Thread):
num_worker_threads = 8
value = 0
def __init__(self, queue, item_processor):
    Thread.__init__(self)
    self.queue = queue
    self.tx = None
    self.idx = 0
    self.item_processor = item_processor
def run(self):
    try:
        while True:
            # Get the work from the queue and expand the tuple
            item = self.queue.get()
            if item is None:
                break
            if self.idx % 1000 == 0 and self.idx != 0:
                if self.tx is not None:
                    time.sleep(0.2)
                    self.tx.commit()
                self.tx = self.item_processor.graph.cypher.begin()
                print('committed 1000 rows till row:' + str(self.idx))
            if self.idx == 0:
                self.tx = self.item_processor.graph.cypher.begin()
            self.idx += 1
            self.item_processor.process(item, self.tx)
            self.queue.task_done()
    finally:
        print('in the worker finally')
        if self.tx is not None and not self.tx.finished:
            self.tx.commit()

根据Python 3文档,我称其应该如何:

def worker():
    while True:
        item = q.get()
        if item is None:
            break
        do_work(item)
        q.task_done() 

明显使用自我。

预先感谢。

通过确保使用正确版本的Python的方式解决了这一点。

最新更新