Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在队列为元组列表的情况下对任务执行多线程处理_Python_Multithreading_Queue - Fatal编程技术网

Python 如何在队列为元组列表的情况下对任务执行多线程处理

Python 如何在队列为元组列表的情况下对任务执行多线程处理,python,multithreading,queue,Python,Multithreading,Queue,我有两个代码,希望有更快的处理 第一代码 (在我最近的线程中,有人指出我的线程代码是错误的) 他表示,无论TotalThread的值是多少,它都不会处理得更快 class ThreadingPower(threading.Thread): def __init__(self, queue): threading.Thread.__init__(self) self.queue= queue def run(self): while

我有两个代码,希望有更快的处理

第一代码 (在我最近的线程中,有人指出我的线程代码是错误的)

他表示,无论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()
凭据是tuple

[
 ['UniqueHWID', 'BuyerCode'], 
 ['UniqueHWID', 'BuyerCode'], 
 ['UniqueHWID', 'BuyerCode']
]
第二个代码 测试表是这样的

[
 ['StudentName', 'Test1', 'Test2', 'Test3'], 
 ['StudentName', 'Test1', 'Test2', 'Test3'], 
 ['StudentName', 'Test1', 'Test2', 'Test3']
]
我还在学习一些关于Python的知识,很抱歉问了这么多问题
我没有测试第二个代码,但由于线程部分是第一个代码的基础,我认为它也有相同的问题

退一步,先尝试不使用线程

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线程
  • 队列中等待的所有线程。get()
  • 将一条消息放入队列中
  • 只有一个线程可以获得此消息,并且必须执行所有作业
  • 将代码更改为
    测试表中的3个作业依次放置

    for job in TestSheet:
        queue.put(job)
    
    这是无效的Python,您必须将其更改为新的队列数据:

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

    第二,您将一个
    str
    列表放入
    队列
    ,并想做一些数学运算,这也将失败

    我不知道测试表中的作业是如何工作的?对于Name,ScoreA,ScoreB,ScoreC,在测试表中:queue.put(Name)queue.put(ScoreA)queue.put(ScoreA)queue.put(ScoreC),我不明白这是如何工作的,然后我会self.queue.get()4次,然后在性能上执行Name,ScoreA,ScoreB,ScoreC:#在这里做点什么?@David:No,
    Name,分数…
    是一个作业的值。一个作业是值列表,在您的示例中是“['StudentName'、'Test1'、'Test2'、'Test3']
    。您的
    TestSheet`包含3个作业。阅读此文并按照示例进行操作
    for in Name,ScoreA,ScoreB,ScoreC in Performance: