谁能解释为什么我会遇到以下错误?
我正在使用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的方式解决了这一点。