我有 2 个代码,希望处理速度更快
第一个代码
(在我最近的帖子中有人指出我的线程代码是错误的)
他表示,无论TotalThread的价值如何,它都不会更快地处理。
class ThreadingPower(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue= queue
def run(self):
while True:
Manager = self.queue.get()
for Numbers,HWID in Manager:
r = requests.post(URL, data=payload) # License Checker Required Numbers ( Buyer Code ) And HWID ( License Code )
data = (r.text)
if ('Verified' in data):
with open(resultsFile,'a+') as results:
results.write("The Number : "+str(Numbers)+" Is Verified By The "+str(HWID))
results.close()
print str(HWID)+" Is Server Verified"
else:
print str(HWID)+" Is Not Server Verified"
self.queue.task_done()
if __name__ == "__main__":
for i in range(TotalThread):
t = ThreadingPower(queue)
t.setDaemon(False)
t.start()
queue.put(credentials)
queue.join()
凭据是元组
[
['UniqueHWID', 'BuyerCode'],
['UniqueHWID', 'BuyerCode'],
['UniqueHWID', 'BuyerCode']
]
第二个代码
class ThreadingPower(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue= queue
def run(self):
while True:
Performance = self.queue.get()
for Name,ScoreA,ScoreB,ScoreC in Performance:
TScore = (ScoreA+ScoreB+ScoreC)/3
print Name+" Has Scored :"+TScore
if (TScore >= PassScore):
print Name+" Has Passed"
# Sending Message To The Server With Name Has Pass
else:
print Name+" Has Failed"
# Sending Message To The Server With Name Has Failed
if __name__ == "__main__":
for i in range(TotalThread):
t = ThreadingPower(queue)
t.setDaemon(False)
t.start()
queue.put(TestSheet)
queue.join()
测试表看起来像这样
[
['StudentName', 'Test1', 'Test2', 'Test3'],
['StudentName', 'Test1', 'Test2', 'Test3'],
['StudentName', 'Test1', 'Test2', 'Test3']
]
我还在学习一些关于Python的知识,抱歉问了这么多问题 我还没有测试第二个代码,但由于线程部分是基于第一个代码的,我认为它有同样的问题
退后一步,先尝试,不要threading
.
def run(p):
Performance = p
Name, ScoreA, ScoreB, ScoreC = Performance
TScore = int((ScoreA + ScoreB + ScoreC) / 3)
print('{} Has Scored:{}'.format(Name, TScore))
if TScore >= PassScore:
print(Name + " Has Passed")
else:
print(Name + " Has Failed")
if __name__ == "__main__":
PassScore = 10
# Name ScoreA, ScoreB, ScoreC
TestSheet = [['StudentName1', 1, 2, 3],
['StudentName2', 4, 5, 6],
['StudentName3', 7, 8, 9]]
for p in TestSheet:
run(p)
如果结果满足您的需求,请添加threading
。
class ThreadingPower(threading.Thread):
...
def run(self):
Performance = self.queue.get()
...
if __name__ == "__main__":
...
for p in TestSheet:
queue.put(p)
...
问题:他说无论TotalThread的价值如何,它都不会更快地处理。
你正在做的是,
- 启动n个线程
- 所有线程都在等待
queue.get()
- 将一条消息放入队列
- 只有一个线程可以获取此消息,并且必须执行所有作业。
更改代码以逐个put
TestSheet
中的 3 个作业。
for job in TestSheet:
queue.put(job)
这是无效的 Python,您必须将其更改为新的queue
数据:
for in Name,ScoreA,ScoreB,ScoreC in Performance:
其次,您将str
列表放入queue
中并想做一些数学运算,这也将失败!