2017-01-04 3 views
0

У меня была ошибка с некоторой многопроцессорностью с пулом (индекс поп-музыки вне диапазона), и когда я попытался упростить мой код, чтобы опубликовать его здесь, я получаю еще одну ошибку, так что это вид озадачивает, увидеть код здесь:Python: «int not callable» с многопроцессорной обработкой с пулом

def some_function(a, b): 
    return a*b 

neigbhourhood = [[object() for _ in range(3)] for _ in range(3)] 
result = [[object() for _ in range(3)] for _ in range(3)] 
pool = Pool() 
for i in range(0, 3): 
    for j in range(0, 3): 
     neigbhourhood[i][j] = pool.apply_async(some_function(i, j)) 

for k in range(0, 3): 
    for l in range(0, 3): 
     result[k][l] = neigbhourhood[k][l].get() 
pool.close() 

отслеживающий о качестве ИНТ объекта не вызываемым в строке 34 (линия с ГЭТ).

Редактировать: Хорошо, это была типичная ошибка в параметрах pool.apply_async, теперь она работает, но мой реальный код по-прежнему случайно сбой, и я не могу повторить ошибку, когда я упрощаю код, Не понимаю.

+0

Просьба предоставить полный текст отзыва. –

+0

Кажется, что проблема не связана с «линией с' get' ", но вместо этого вы передаете функцию result в' pool.apply_async'. 'some_function (i, j)' уже вычисляет результат, то, что вы хотите сделать, это передать функцию в качестве первого параметра, а аргументы функции - как кортеж, т. е. 'pool.apply_async (some_function, (i, j))'. –

ответ

3

Проблема заключается в том, как вы звоните apply_async. Он требует, чтобы вы передавали функцию обратного вызова и аргументы, которые будут переданы в предоставленную функцию.

pool.apply.async(some_function, [x, y]) 
+0

Не возвращает ли объект ApplyResult (который я преобразовываю в int с помощью get())? Что мне делать? –

+0

@RaphaelTodo 'some_function' создает результат до вызова' apply_async'. Таким образом, вы действительно будете предоставлять функцию «int» как функцию обратного вызова, которая, очевидно, не работает –