2017-09-14 82 views
0

我已經做在Python併發的任務,如下面的代碼如何映射類和函數在concurrent.futures.ProcessPoolExecute

def fun_x(a, b) : 
    for x in range(10000) : 
     x = x*x 
      for y in range(10000) : 
       y = y*y 
    return a*x, b*y 


with futures.ProcessPoolExecutor() as executor: 
    futures_all_data = {executor.submit(fun_x,  # Function name 
             number_a, # args 1 
             number_b, # args 2 
             ) : number_a 
             for number_a, number_b in arg } 
output_final = {} 
for future in futures.as_completed(futures_all_data, timeout = None) : 
     result_Code, result_content = future.result() 
     output_final[result_Code] = result_content 

return output_final 

目前,我需要使用和類和子功能,而不是funx ,像,

def class_x(object): 
    __init__(self, a): 
     for x in range(10000): 
      x = x*x 
     a = a*x 
    def fun_y(self, b) : 
     for y in range(10000): 
      y = y*y 
     b = y*b + a 

但是,我不知道如何處理executor.submit部分?

你能給我一些指導嗎?

非常感謝!

+0

你能解釋一下你想要什麼:for x in range(10000):x = x * x?爲什麼不只是做a = a * 10000 * 10000? –

+0

@MenglongLi它只是一個簡單的函數來節省時間並獲得併發性能。 –

回答

0

我不確定你的代碼真的想做什麼,似乎你的代碼格式不好。但是,我有一個想法,作任何功能的一類

說我們有一個函數x

def x(args): 
    body 

,使之成爲類:

import collections 

class X(collections.abc.callable): 
    def __call__(self, args): 
     body 
x = X() 

# usage 
x(args) 

所以你不要必須改變太多東西,並且你得到了一個類X,並且當你需要調用它時,你仍然使用x(參數)

PS:x是在類X中的一種。

+0

謝謝你的回覆。有兩個參數需要分別輸入到class_x和func_y。我不知道你如何實現這個方法。但是你給了我一個想法,我可以創建一個新的函數來調用class_x和func_y。 –

+0

那麼爲什麼不讓兩個單獨的課程^ _^ –

+0

哈哈哈。這個想法是最後的選擇。(╯_╰)╭。我正在研究你的方法。我很感激! @孟龍龍 –