代码之家  ›  专栏  ›  技术社区  ›  pookie

使用元组的Python多处理不起作用

  •  0
  • pookie  · 技术社区  · 9 年前

    我正在用Python 3尝试多处理,我遇到了一些奇怪的行为(好吧,至少对我来说很奇怪!)。

    本质上,我创建了一个包含10个随机数的列表。然后我在一个范围内循环(在我的示例中,它是2),对于每个迭代,我使用 pool.apply_async

    然而,我发现,由于某些原因,我只看到了2个结果(即我的第一个循环中的2次迭代):

    import multiprocessing
    import time
    import random
    
    class Calculator:
    
        def calculate(self, links):
            print("LENGHT:", len(links)) # 48
            tups=[]
            for datasetlink in links:
                print(datasetlink)
                tups.append("GO", datasetlink)
            return tups
    
    dslinks = random.sample(range(1, 101), 10)
    result_list = []
    
    def Process(datasetlinks):
    
        calc = Calculator();
        tups = calc.calculate(datasetlinks)
        return tups;
    
    def log_result(result):
        result_list.append(result)
    
    def apply_async_with_callback():
        pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())
        for i in range(2):
            pool.apply_async(Process, args = (dslinks,), callback = log_result)
        pool.close()
        pool.join()
        DoPrintResults()
    
    def DoPrintResults():
        for result in result_list:
            print(result)
    
    if __name__ == '__main__':
        start = time.time()
        apply_async_with_callback()
        end = time.time()
        print("Execution took: ", (end-start), " seconds")
    

    tups=[] , tups.append("GO", datasetlink) return tups 从 Calculator.calculate 功能,一切正常,我看到 for-loop 计算器.计算

    我做错了什么?

    1 回复  |  直到 9 年前
        1
  •  0
  •   klutt    9 年前

    问题是这一行:

    tups.append("GO", datasetlink)
    

    将其更改为:

    tups.append(datasetlink)
    

    Process 在一个 try

    def Process(datasetlinks):
        try:
            calc = Calculator();
            tups = calc.calculate(datasetlinks)
        except:
            print(sys.exc_info()[0])
        return tups;
    

    这给了我 <type 'exceptions.NameError'> 当我移动try块进行计算时:

    def calculate(self, links):
        try:
            print("LENGHT:", len(links)) # 48                                                                      
            tups=[]
            for datasetlink in links:
                print(datasetlink)
                tups.append("GO", datasetlink)
        except:
            print(sys.exc_info()[0])
        return tups
    

    相反,我得到了 <type 'exceptions.TypeError'>