import queue
import threading
import datetime
import time
class RegistWorkerFactory():
def __init__(self, domain=None):
self.domain = domain
self.addtime = datetime.datetime.now()
def get_worker(self):
print("get work, start registing....")
if (datetime.datetime.now() - self.addtime).seconds > 60:
return False
return ParseCommand(self.domain)
class ParseCommand(threading.Thread):
def __init__(self, domain=None):
threading.Thread.__init__(self)
self.domain = domain
def run(self):
print("start parse {0}".format(self.domain))
class Test():
def __init__(self):
self.workers = queue.Queue()
# put
self.workers.put(RegistWorkerFactory('domain1.com'))
self.workers.put(RegistWorkerFactory('domain2.org'))
def run(self):
while True:
threads = []
for i in range(self.workers.qsize()):
temp = self.workers.get()
thread = temp.get_worker()
if thread:
# thread <ParseCommand(Thread-85, initial)> 会不停的从Thread-1增加
print("thread", thread)
self.workers.put(temp)
threads.append(thread)
for t in threads:
time.sleep(.2)
t.start()
# for t in threads:
# t.join()
time.sleep(1)
print("\n{} - {}\n".format(datetime.datetime.now(), '*'*50))
notify = Test()
notify.run()
上面的代码也能运行,我本来是想写一个抢注域名的程序。我对于线程不太了解。在类Test中我,我希望 Test.workers这个队列中如果有域名就开始运行
在这个地方:
for t in threads:
time.sleep(.2)
t.start()
但是在while True中,print("thread", thread) 这句代码打印的结果会是
thread <ParseCommand(Thread-1, initial)>
thread <ParseCommand(Thread-2, initial)>
。。。。
。。。。
thread <ParseCommand(Thread-85, initial)>
我想要应该是每次循环,它执行一次,然后下一个循环重新执行。这是不是错了?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.