J'ai le code Python suivant où je recueille des données de l'entrée standard dans une liste et y exécute le syntaxnet. Les données sont sous la forme d'objets json à partir desquels je vais extraire le champ de texte et le nourrir vers syntaxnet.Recueillir des données en morceaux à partir de stdin: Python
data = []
for line in sys.stdin:
data.append(line)
run_syntaxnet(data) ##This is a function##
Je fais cela parce que je ne veux pas Syntaxnet à courir pour chaque tweet unique car il faudra un temps très long et donc diminuer les performances.
En outre, lorsque je cours ce code sur de très grandes données, je ne veux pas continuer à le collecter pour toujours et manquer de mémoire. Donc, je veux recueillir des données en morceaux - peut-être comme 10000 tweets à la fois et exécuter Syntaxnet sur eux. Quelqu'un peut-il m'aider à faire cela?
Aussi, je veux comprendre ce qui peut être la longueur maximale de la liste data
afin que je ne manque pas de mémoire.
EDIT:
J'ai utilisé le code:
data = []
for line in sys.stdin:
data.append(line)
if len(data) == 10000:
run_syntaxnet(data) ##This is a function##
data = []
qui fonctionne parfaitement bien si le nombre de lignes dans les données d'entrée est un multiple de 10000. Je ne sais pas quoi faire avec le reste des rangées. Par exemple, si le nombre total de lignes est de 12 000, les premières 10000 lignes sont traitées comme je le souhaite, mais les 2000 suivantes sont interrompues car la condition len(data) > 10000
n'est pas remplie.
Je veux faire quelque chose comme:
if len(data) > 10000 or 'EOF of input file is reached':
run_syntaxnet(data)
Quelqu'un peut-il me dire comment vérifier l'EOF du fichier d'entrée? Merci d'avance! PS: Toutes les données dans le fichier python proviennent de Streaming de porcs. En outre, je ne peux pas me permettre de compter le nombre de lignes sin les données d'entrée et envoyer en tant que paramètre car j'ai des millions de lignes et compter lui-même prendra une éternité.
Jetez un oeil à des générateurs – iScrE4m