Using partition "breaks" program logic
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 28/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- python
- Área
- stream-processing
Línea de trabajo
Start by tracing stream.partition, stream.emit, and accumulate, then read the documented async def process_file example in “Processing Time and Back Pressure.” Determine how a partition flushes when input reaches EOF and how callers can wait for pending processing; done means the final count includes all lines before the concluding print runs.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
I am struggling to use partition in a pipeline because it "breaks" the logic of my program; presumably because it introduces asynchronous processing.
As a simplified example, I have something that works along the lines of this:
import streamz
def main():
state = {
"cnt": 0,
}
stream = streamz.Stream()
cntd = stream.accumulate(cnt,
returns_state=True,
start=state)
cntd.sink(print)
with open("many_lines.txt", "r") as fh:
for line in fh:
stream.emit(line)
print(f"found {state.get('cnt')} lines")
def cnt(state, itm):
state["cnt"] += 1
return state, itm
if __name__ == "__main__":
main()
This basically runs through all the lines in the file many_lines.txt, counts and prints them and then reports
found 10000 lines
So far so good.
When I introduce partition now, like this:
import streamz
def main():
state = {
"cnt": 0,
}
stream = streamz.Stream()
parted = stream.partition(10001, timeout=2) # <= PARTITION HERE
cntd = parted.accumulate(cnt,
returns_state=True,
start=state)
cntd.sink(print)
with open("many_lines.txt", "r") as fh:
for line in fh:
stream.emit(line)
print(f"found {state.get('cnt')} lines")
def cnt(state, itm):
state["cnt"] += 1
return state, itm
if __name__ == "__main__":
main()
I would want to see basically the same result. But I see nothing for some time and then
found 0 lines
I know, there are only 10'000 lines in many_lines.txt so the partition will never fill up, but it should hit the timeout at some point and "release" the data, no?
I suspect that the program terminates before the partition hits the timeout, so I tried (many variations of) awaiting stream.emit(line). That was inspired by the async def process_file(fn): function in Processing Time and Back Pressure.
For example like this:
import streamz
def main():
state = {
"cnt": 0,
}
stream = streamz.Stream()
parted = stream.partition(10001, timeout=2)
cntd = parted.accumulate(cnt,
returns_state=True,
start=state)
cntd.sink(print)
with open("many_lines.txt", "r") as fh:
for line in fh:
await stream.emit(line) # <= USE AWAIT HERE
print(f"found {state.get('cnt')} lines")
def cnt(state, itm):
state["cnt"] += 1
return state, itm
if __name__ == "__main__":
main()
But this (obviously) does not work (SyntaxError: 'await' outside async function). And I also did not find a way to make it work.
(How) Can I make sure the for loop terminates before the print statement (or any remaining code, for that matter) is executed? Or am I getting this completely wrong?
My use case is to read (all) lines in pretty big files (I cannot load into memory at once), send them through a streamz pipeline and then continue with my program. "Then" meaning, after all lines are processed (also those that might be "stuck" in a partition when no more lines are emitted because we reached EOF; this is why I need the timeout, I believe).
- Lenguaje dominante
- Python
- Estrellas
- 1.3k
- Forks
- 149
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de python-streamz/streamz
-
pkg_resources warning Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
python-streamz/streamz#481 · 4 comentarios ·
-
Combining the streamz.Stream.filenames() and streamz.Stream.from_textfile() using dask scatter? Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
python-streamz/streamz#480 · 2 comentarios ·
-
Compile the code into c++ Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
python-streamz/streamz#479 · 1 comentario ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
python-streamz/streamz#478 · 6 comentarios ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 10/100
python-streamz/streamz#476 · 17 comentarios · 2 reacciones ·
Todos los issues de python-streamz/streamz
Issues similares
-
货币战争手改优先级配置缺少列表元素类型校验(P3) Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
syfoud/Simulated_Scepter#172 ·
-
A cancelled tests run makes the coverage comment workflow fail and reports it as a red check on main Abiertoarea: ci bug perceived difficulty: 3
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Nitjsefnie-Harness-Commons/daedalus#921 · 1 comentario ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
EleutherAI/lm-evaluation-harness#4207 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
ClickHouse/clickhouse-connect#1057 ·