2011-12-21 5 views
0

Я хочу сравнить многопоточную и многопроцессорную программу python. Но я получил ошибку интерпретации:Ошибка интерпретации для многопоточности и многопроцессорности python

Файл "./parallelPython.py", строка 23 времени fornorm (г, диапазон (100)) ^ SyntaxError: неверный синтаксис

Код выглядит следующим образом:

#!/usr/bin/python -tt 

import numpy as np 
import math 

def f(x): 
    print x 
    y = [1]*10000000 
    [math.exp(i) for i in y] 
def g(x): 
    print x 
    y = np.ones(10000000) 
    np.exp(y) 

from handythread import foreach 
from processing import Pool 
from timings import f,g 

def fornorm(f,l): 
for i in l: 
    f(i) 

time fornorm(g,range(100)) 
time fornorm(f,range(10)) 
time foreach(g,range(100),threads=2) 
time foreach(f,range(10),threads=2) 
p = Pool(2) 
time p.map(g,range(100)) 
time p.map(f,range(100)) 

Я не понимаю, почему fornorm() имеет проблему, это было определено !!!

благодаря

ответ

1

Это выглядит как ошибка Отступы здесь:

def fornorm(f,l): 
for i in l: 
    f(i) 

После того, как ваша Защита питон ожидает отступ блока.

Кстати, time something - это «волшебная» функция IPython, и она не будет работать в файле сценария. Вы должны использовать модуль import timeit и использовать его вместо этого.

1

Он не сказал, что fornorm не был определен, он говорит, что у вас есть синтаксическая ошибка в строке, где вы звоните fornorm. Синтаксические ошибки означают, что Python даже не может понять ваш код: это как если бы я сказал вам «flrk ask web ski ur lkjq», а затем попросите вас сделать то, что я сказал. Ошибка, связанная с fornorm, не будет определена позже. Как бы то ни было, Python даже не может сказать, запрашиваете ли вы его вызвать функцию, не говоря уже о том, звоните ли вы уже определенному или нет.

Похоже, ваша ошибка заключается в следующем:

time fornorm(g,range(100)) 

Это выглядит, как вы пытаетесь использовать команду оболочки time. Команды Shell не Python, и Python этого не понимает.

Однако ваш код, вставленный в SO, также имеет ошибки отступов, которые должны были вызвать синтаксическую ошибку раньше этой строки, поэтому я подозреваю, что мы можем видеть здесь не то, что вы использовали.

0

Откуда вы получаете «время»? Это не действительная инструкция python. Это не похоже на сценарий оболочки.

Если вы хотите, чтобы время вещи, использовать библиотеку timeit: http://docs.python.org/library/timeit.html

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