【问题标题】:Python: Get multiple return values and provide multiple arguments in executor.map of concurrent.futures.ProcessPoolExecutor()Python:在 concurrent.futures.ProcessPoolExecutor() 的 executor.map 中获取多个返回值并提供多个参数
【发布时间】:2019-02-12 18:30:35
【问题描述】:

我对 Python 多处理概念很陌生。 我正在尝试调用函数magicFunction,它有多个参数,其中第一个是可迭代的,而其他所有参数都是不可迭代的。另外,它返回多个值,比如x, y, z

我想弄清楚如何在这里使用executor。这是我的方法,这显然是错误的。

def magicFunction(webElem, uid_list, ignoreTagsList):
    ..
    ..
    return x,y,z

with concurrent.futures.ProcessPoolExecutor() as executor:
    for webElem, x_val, y_val, z_val in zip(webElem_list, executor.map(magicFunction, webElem_list, uid_list, ignoreTagsList)):
    ..
    ..
    print("Values:", x_val, y_val, z_val)

有人可以建议正确的方法吗?

【问题讨论】:

    标签: python-3.x python-multiprocessing threadpoolexecutor


    【解决方案1】:

    你可以使用一个类:

    class FunctionReturn:
        x = 0
        y = 0
        z = 0
    
    def myFunction():
        output = FunctionReturn()
        output.x = 1
        output.y = 2
        output.z = 3
        return output
    
    data = myFunction()
    print(data.x , data.y , data.z)
    

    这将打印 1 2 3

    【讨论】:

      【解决方案2】:
      import concurrent.futures
      
      ## This works list of numbers
      def square(number):
          return number ** 2, True
      
      number = [1,2,3,4,5]
      with concurrent.futures.ThreadPoolExecutor() as executor:
          future = [executor.submit(square, i) for i in number]
          print (future)
          return_value = [i.result() for i in future]
          print (return_value)
          d = {k:v for k, v in return_value} ##if you want in dictionary
          for k, v in return_value:  ##if want iterate and get the values
              print (k, v)
      
      
      
      
      import concurrent.futures
      
      def square(number):
          return number ** 2, True
      
      with concurrent.futures.ThreadPoolExecutor() as executor:
          future = executor.submit(square, 5)
          return_value, bool_value  = future.result()
          print(return_value, bool_value)
      
      o/p: 25 True
      

      【讨论】:

      • 请解释你的答案。
      猜你喜欢
      • 2021-02-05
      • 2016-09-05
      • 2019-05-10
      • 2020-01-25
      • 1970-01-01
      • 2018-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多