如何多线程一个任务,队列是Tupples Python的列表



我有 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的价值如何,它都不会更快地处理。

你正在做的是,

  1. 启动n个线程
  2. 所有线程都在等待queue.get()
  3. 一条消息放入队列
  4. 只有一个线程可以获取此消息,并且必须执行所有作业。

更改代码以putTestSheet中的 3 个作业。

for job in TestSheet:
queue.put(job)

这是无效的 Python,您必须将其更改为新的queue数据:

for in Name,ScoreA,ScoreB,ScoreC in Performance:

其次,您将str列表放入queue中并想做一些数学运算,这也将失败

最新更新