2015-08-04 4 views
1

У меня есть код вроде этого.Многопроцессорность Python TypeError

Я получаю сообщение об ошибке, когда я делаю работу [я] .get(), который является объектом multiprocessing.pool.ApplyResult

TypeError: 'Series' object is not callable

import multiprocessing 
import numpy as np 
import pandas as pd 
def tf(x): 
    return np.mean(x) 

def main(): 
    pool=multiprocessing.Pool(6) 
    sds=pd.Series(np.random.normal(0,.01,1000)) 
    jobs=[] 

    for i in xrange(10): 
     jobs.append(pool.apply_async(pd.rolling_apply(sds,2,tf))) 

    pool.close() 
    pool.join() 


    for i in xrange(len(jobs)): 
     jobs[i].get() 




if __name__=="__main__": 
    main() 
+0

не связан с вопросом: заменить последнюю петлю 'для работы в заданиях: работа. get() ' – Pynchia

ответ

1

TypeError: 'Series' object is not callable

потому, что вы передаете результат функции объединять, а не функции самого, как вы должны делать.

Вы должны сделать следующее:

import multiprocessing 
import numpy as np 
import pandas as pd 

def tf(x): 
    return np.mean(x) 

def main(): 
    pool=multiprocessing.Pool(6) 
    sds=pd.Series(np.random.normal(0,.01,1000)) 
    jobs=[] 

    for i in xrange(10): 
     jobs.append(pool.apply_async(pd.rolling_apply, (sds,2,tf))) 

    pool.close() 
    pool.join() 


    for i in xrange(len(jobs)): 
     jobs[i].get() 

if __name__=="__main__": 
    main() 

Выход:

0   NaN 
1  0.009682 
2  0.002747 
3  0.005108 
4  0.002115 
5  0.000449 
6  0.011551 
7  0.000686 
8 -0.004860 
9 -0.007568 
10 -0.005052 
11 -0.004860 
12 -0.003354 
13 0.005291 
14 0.000845 
... 
985 -0.001762 
986 -0.008001 
987 -0.007872 
988 -0.007356 
989 -0.003436 
990 -0.003725 
991 -0.010541 
992 -0.001246 
993 0.002308 
994 0.004322 
995 0.010862 
996 0.003545 
997 -0.002039 
998 0.003992 
999 -0.006216 
Length: 1000, dtype: float64 
0   NaN 
1  0.009682 
2  0.002747 
3  0.005108 
4  0.002115 
5  0.000449 
6  0.011551 
7  0.000686 
8 -0.004860 
9 -0.007568 
10 -0.005052 
11 -0.004860 
12 -0.003354 
13 0.005291 
14 0.000845 
... 
985 -0.001762 
986 -0.008001 
987 -0.007872 
988 -0.007356 
989 -0.003436 
990 -0.003725 
991 -0.010541 
992 -0.001246 
993 0.002308 
994 0.004322 
995 0.010862 
996 0.003545 
997 -0.002039 
998 0.003992 
999 -0.006216 
Length: 1000, dtype: float64 
0   NaN 
1  0.009682 
2  0.002747 
3  0.005108 
4  0.002115 
5  0.000449 
6  0.011551 
7  0.000686 
8 -0.004860 
9 -0.007568 
10 -0.005052 
11 -0.004860 
12 -0.003354 
13 0.005291 
14 0.000845 
... 
985 -0.001762 
986 -0.008001 
987 -0.007872 
988 -0.007356 
989 -0.003436 
990 -0.003725 
991 -0.010541 
992 -0.001246 
993 0.002308 
994 0.004322 
995 0.010862 
996 0.003545 
997 -0.002039 
998 0.003992 
999 -0.006216 
Length: 1000, dtype: float64 
0   NaN 
1  0.009682 
2  0.002747 
3  0.005108 
4  0.002115 
5  0.000449 
6  0.011551 
7  0.000686 
8 -0.004860 
9 -0.007568 
10 -0.005052 
11 -0.004860 
12 -0.003354 
13 0.005291 
14 0.000845 
... 
985 -0.001762 
986 -0.008001 
987 -0.007872 
988 -0.007356 
989 -0.003436 
990 -0.003725 
991 -0.010541 
992 -0.001246 
993 0.002308 
994 0.004322 
995 0.010862 
996 0.003545 
997 -0.002039 
998 0.003992 
999 -0.006216 
Length: 1000, dtype: float64 
0   NaN 
1  0.009682 
2  0.002747 
3  0.005108 
4  0.002115 
5  0.000449 
6  0.011551 
7  0.000686 
8 -0.004860 
9 -0.007568 
10 -0.005052 
11 -0.004860 
12 -0.003354 
13 0.005291 
14 0.000845 
... 
985 -0.001762 
986 -0.008001 
987 -0.007872 
988 -0.007356 
989 -0.003436 
990 -0.003725 
991 -0.010541 
992 -0.001246 
993 0.002308 
994 0.004322 
995 0.010862 
996 0.003545 
997 -0.002039 
998 0.003992 
999 -0.006216 
Length: 1000, dtype: float64 
0   NaN 
1  0.009682 
2  0.002747 
3  0.005108 
4  0.002115 
5  0.000449 
6  0.011551 
7  0.000686 
8 -0.004860 
9 -0.007568 
10 -0.005052 
11 -0.004860 
12 -0.003354 
13 0.005291 
14 0.000845 
... 
985 -0.001762 
986 -0.008001 
987 -0.007872 
988 -0.007356 
989 -0.003436 
990 -0.003725 
991 -0.010541 
992 -0.001246 
993 0.002308 
994 0.004322 
995 0.010862 
996 0.003545 
997 -0.002039 
998 0.003992 
999 -0.006216 
Length: 1000, dtype: float64 
0   NaN 
1  0.009682 
2  0.002747 
3  0.005108 
4  0.002115 
5  0.000449 
6  0.011551 
7  0.000686 
8 -0.004860 
9 -0.007568 
10 -0.005052 
11 -0.004860 
12 -0.003354 
13 0.005291 
14 0.000845 
... 
985 -0.001762 
986 -0.008001 
987 -0.007872 
988 -0.007356 
989 -0.003436 
990 -0.003725 
991 -0.010541 
992 -0.001246 
993 0.002308 
994 0.004322 
995 0.010862 
996 0.003545 
997 -0.002039 
998 0.003992 
999 -0.006216 
Length: 1000, dtype: float64 
0   NaN 
1  0.009682 
2  0.002747 
3  0.005108 
4  0.002115 
5  0.000449 
6  0.011551 
7  0.000686 
8 -0.004860 
9 -0.007568 
10 -0.005052 
11 -0.004860 
12 -0.003354 
13 0.005291 
14 0.000845 
... 
985 -0.001762 
986 -0.008001 
987 -0.007872 
988 -0.007356 
989 -0.003436 
990 -0.003725 
991 -0.010541 
992 -0.001246 
993 0.002308 
994 0.004322 
995 0.010862 
996 0.003545 
997 -0.002039 
998 0.003992 
999 -0.006216 
Length: 1000, dtype: float64 
0   NaN 
1  0.009682 
2  0.002747 
3  0.005108 
4  0.002115 
5  0.000449 
6  0.011551 
7  0.000686 
8 -0.004860 
9 -0.007568 
10 -0.005052 
11 -0.004860 
12 -0.003354 
13 0.005291 
14 0.000845 
... 
985 -0.001762 
986 -0.008001 
987 -0.007872 
988 -0.007356 
989 -0.003436 
990 -0.003725 
991 -0.010541 
992 -0.001246 
993 0.002308 
994 0.004322 
995 0.010862 
996 0.003545 
997 -0.002039 
998 0.003992 
999 -0.006216 
Length: 1000, dtype: float64 
0   NaN 
1  0.009682 
2  0.002747 
3  0.005108 
4  0.002115 
5  0.000449 
6  0.011551 
7  0.000686 
8 -0.004860 
9 -0.007568 
10 -0.005052 
11 -0.004860 
12 -0.003354 
13 0.005291 
14 0.000845 
... 
985 -0.001762 
986 -0.008001 
987 -0.007872 
988 -0.007356 
989 -0.003436 
990 -0.003725 
991 -0.010541 
992 -0.001246 
993 0.002308 
994 0.004322 
995 0.010862 
996 0.003545 
997 -0.002039 
998 0.003992 
999 -0.006216 
Length: 1000, dtype: float64 
+0

Да, он имеет:' apply_async (func [, args [, kwds [, callback]]]) ' – Geeocode

1

Это потому, что первый аргумент pool.apply_async должна быть функцией, но вы передаете результат pd.rolling_apply, который является Series. Я не совсем уверен, что вы пытаетесь достичь с помощью этого кода, но я думаю, что вы могли бы хотеть что-то вроде этого внутри петли

func = lambda s: pd.rolling_apply(s, 2, tf) 
job = pool.apply_async(func, sds) 
jobs.append(job) 

Кроме того, я, вы можете просто передать np.mean в pd.rolling_apply как

lambda s: pd.rolling_apply(s, 2 np.mean) 

Определение tf представляется излишним для меня.

0

Нанести использование асинхронной: apply_async(func[, args[, kwds[, callback]]])

FUNC является отзывной, арг являются параметрами. Вы должны передать pd.rolling_apply как функцию и (sds,2,tf) в качестве аргументов.

Просто: jobs.append(pool.apply_async(pd.rolling_apply, (sds,2,tf)))

Имейте в виду, что для одного аргумента только вы должны пройти дополнительную запятую: jobs.append(pool.apply_async(pd.rolling_apply, (sds,)))

Смежные вопросы