Proces Python Eroare de memorie

Execut un program Python care descarcă date, deci ori de câte ori încerc să extrag prea multe date (nu am putut scrape fișiere până la 16 MB ) programul se blochează.

Eroarea:

INFO: Got 45294 tweets for %23COVID19%20since%3A2020-03-16%20until%3A2020-03-17. Traceback (most recent call last): File "/home/pi/Downloads/coronavirus2.py", line 127, in <module> search_term = "#NoSonVacaciones" File "/home/pi/Downloads/coronavirus2.py", line 77, in myfunction tweets= query_tweets(search_term, begindate= begin_date, enddate = end_date, poolsize=poolsize, lang= lang) File "/home/pi/Downloads/twitterscraper-1.3.1/twitterscraper/query.py", line 285, in query_tweets for new_tweets in pool.imap_unordered(partial(query_tweets_once, limit=limit_per_pool, lang=lang), queries): File "/usr/local/lib/python3.6/site-packages/billiard/pool.py", line 1964, in next raise Exception(value) Exception: Traceback (most recent call last): File "/usr/local/lib/python3.6/site-packages/billiard/pool.py", line 366, in workloop put((READY, (job, i, result, inqW_fd))) File "/usr/local/lib/python3.6/site-packages/billiard/queues.py", line 366, in put self.send_payload(ForkingPickler.dumps(obj)) File "/usr/local/lib/python3.6/site-packages/billiard/reduction.py", line 56, in dumps cls(buf, protocol).dump(obj) billiard.pool.MaybeEncodingError: Error sending result: ""(<twitterscraper.tweet.Tweet object at 0x734435b0>, <twitterscraper.tweet.Tweet object at 0x726a0750>, <twitterscraper.tweet.Tweet object at 0x726a03b0>, <twitterscraper.tweet.Tweet object at 0x726a0450>, <twitterscraper.tweet.Tweet object at 0x726a0090>, <twitterscraper.tweet.Tweet object at 0x726a0e70>, ... Reason: ""MemoryError()"". 

Există un mod în care pot aloca mai multă memorie pentru acest proces. Nu-mi pasă cât timp durează sau orice alte procese care ar putea fi afectate.

Am un sistem de operare Raspbian Jessie actualizat, iar configurația memoriei este următoarea:

pi@raspberrypi:~ $ cat /proc/meminfo MemTotal: 947748 kB MemFree: 285512 kB MemAvailable: 510712 kB Buffers: 78584 kB Cached: 193256 kB SwapCached: 1328 kB Active: 252492 kB Inactive: 362552 kB Active(anon): 99520 kB Inactive(anon): 275632 kB Active(file): 152972 kB Inactive(file): 86920 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 102396 kB SwapFree: 1736 kB Dirty: 20 kB Writeback: 0 kB AnonPages: 341888 kB Mapped: 60048 kB Shmem: 31944 kB Slab: 25744 kB SReclaimable: 11572 kB SUnreclaim: 14172 kB KernelStack: 1976 kB PageTables: 4640 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 576268 kB Committed_AS: 1269388 kB VmallocTotal: 1114112 kB VmallocUsed: 0 kB VmallocChunk: 0 kB CmaTotal: 8192 kB CmaFree: 1412 kB 

cod aici

Vă mulțumim anticipat,

Pablo

Comentarii

  • Ce se întâmplă dacă faceți upgrade la Raspbian Buster de la sfârșit of-life Jessie.

Răspuns

Dacă nu vă pasă de timpul de execuție, creșterea dimensiunii swap-ului de la 100 MB la câțiva GB va tripla cantitatea de memorie disponibilă. Proiectând eficiența actuală a codului (1 GB sau RAM necesară pentru a procesa 16 MB de date), ar trebui să puteți procesa până la 48 MB de date simultan.

sudo dphys-swapfile swapoff echo "CONF_SWAPSIZE=2048"|sudo tee /etc/dphys-swapfile sudo dphys-swapfile swapon 

Cu excepția cazului în care algoritmul de procesare a datelor este legat de memorie, simpla scriere a unui cod mai bun ar putea reduce considerabil cerințele de memorie.

Comentarii

  • Genial! Am mărit dimensiunea swap-ului și am putut procesa până la 20 MB până acum, iar procesul funcționează în prezent. T te doresc foarte mult, Dmitry!

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *