複数の関数でクラス内のキュー オブジェクトにアクセスする際に問題が発生しています。次のコードは、私が何をしようとしているのかを示している可能性があります。
import MySQLdb
import socket, sys
from struct import *
import threading
import sched, time
from datetime import datetime
from copy import deepcopy
import Queue
IP = {}
class QP:
def __init__(self):
self.jobs = Queue.Queue()
# this function runs every 10 seconds
# and processes any queued data.
def processQueue(self):
print(self.jobs.qsize())
time.sleep(5)
if self.jobs.empty():
print("No items in queue")
else:
IP_TEMP = {}
IP_TEMP = self.jobs.get()
IP_TEMP_QUEUE = {}
IP_TEMP_QUEUE = IP_TEMP
try:
cnx = #connect to database
cursor = cnx.cursor()
for k, v in IP_TEMP.iteritems():
#there is some code here, but its not the issue
try:
cursor.execute(add_packet, data_packet)
cnx.commit()
print("Task Done")
except:
print("Query failed, skipping")
break
except:
self.queueJobs(IP_TEMP_QUEUE)
IP = {}
self.jobs.task_done()
self.processQueue()
# this function is called by other modules to add data
def queueJobs(self, data):
self.jobs.put(data)
print(self.jobs.qsize())
return True
これは、他のモジュールで queueJobs メソッドを呼び出す方法です。
self.process.queueJobs(IP_TEMP_QUEUE)
ここでの主な問題は、ジョブが関数processQueue()
の下に追加されているにもかかわらず、キューにジョブがないことを関数が常に返すことですqueueJobs()
。
どんな助けでも素晴らしいでしょう!