为什么Factory.rdyq
对继承的类不可见?你知道吗
你知道吗棒.py你知道吗
import Queue
import threading
class Factory:
name = ""
rdyQ = Queue.Queue()
dispQ = Queue.Queue()
def __init__(self):
self.worker_count = 1
self.worker_thread = None
def worker(self): pass
def initialize(self):
for i in range(self.worker_count):
t = threading.Thread(target=self.worker)
t.daemon = True
t.start()
self.worker_thread = t
@staticmethod
def joinQ():
Factory.rdyQ.join()
Factory.dispQ.join()
return
@staticmethod
def getFactory(factory_name):
if factory_name == "setup":
return SetupFactory()
elif factory_name == "dispatch":
return DispatchFactory()
elif factory_name == "complete":
return CompleteFactory()
else:
return None
class SetupFactory(Factory):
name = "setup"
def worker(self):
while True:
try:
item = Factory.rdyq.get(timeout=1)
print "setup: %s" % item
Factory.rdyq.task_done()
Factory.dispQ.put(item)
except Queue.Empty, msg:
continue
class DispatchFactory(Factory):
name = "dispatch"
def worker(self):
while True:
try:
item = Factory.dispQ.get(timeout=1)
print "dispQ: %s" % item
Factory.dispQ.task_done()
except Queue.Empty, msg:
continue
class CompleteFactory(Factory):
name = "complete"
def worker(self):
for i in range(10):
Factory.rdyq.put(i)
你知道吗foo.py公司你知道吗
import bar as df
setup = df.Factory.getFactory("setup")
dispatch = df.Factory.getFactory("dispatch")
complete = df.Factory.getFactory("complete")
setup.initialize()
dispatch.initialize()
complete.initialize()
df.Factory.joinQ()
setup.worker_thread.join()
dispatch.worker_thread.join()
complete.worker_thread.join()
python foo.py
File "/u/bar.py", line 73, in worker
Factory.rdyq.put(i)
AttributeError: class Factory has no attribute 'rdyq'
Python变量和属性区分大小写,因此“rdyq”与“rdyq”不同。你知道吗
你用大写字母q来命名,也许这能解决问题?你知道吗
你知道吗工厂.rdyQ.put(一)
我建议使用\u下划线\u作为\u变量,以避免这种情况可能导致的问题。你知道吗
对于joinQ,应该使用
classmethod
而不是staticmethod
。你知道吗你也有一个
rdyq
(棒.py最后一行)而不是预期的rdyQ
,Python区分大小写。你知道吗你知道吗棒.py你知道吗
相关问题 更多 >
编程相关推荐