Dostosowuję aplikację, która intensywnie korzysta z generatorów, aby uzyskać jej wyniki w celu zapewnienia interfejsu internetowego web.py.Profilowanie generatorów Pythona
Do tej pory mogłem zawijać wywołanie do pętli for i instrukcji generujących wydruki w funkcji i wywoływać to za pomocą cProfile.run()
lub runctx()
. Koncepcyjnie:
def output():
for value in generator():
print(value)
cProfile.run('output()')
W web.py muszę zawinąć go w następujący sposób, ponieważ chcę, aby od razu produkować wyjście z potencjalnie długotrwałych obliczeń w każdym kroku iteracji za pomocą yield
:
class index:
def GET(self):
for value in generator():
yield make_pretty_html(value)
Czy istnieje sposób na profilowanie wszystkich wywołań do generatora, jak w pierwszym przykładzie, gdy jest używany tak, jak w drugim?
Czy chcesz po prostu zmierzyć całe wywołanie funkcji zamiast tylko jednej iteracji? Podobnie jak w 'cProfile.run ('list (index(). GET())')'? –
Zasadniczo to właśnie osiąga pętla for-loop. Problem polega na tym, że nie mam żadnej kontroli nad wywołaniami funkcji 'GET()', jest ona obsługiwana przez 'web.py'. Co więcej, nie sądzę, aby produkcja była już produkowana w ten sposób (przy użyciu wartości zwracanej). –