데이터를 스크랩하는 Python 프로그램을 실행 중이므로 너무 많은 데이터를 검색하려고 할 때마다 (파일을 스크랩 할 수 없습니다. 최대 16MB ) 프로그램이 충돌합니다.
오류 :
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()"".
이 프로세스에 더 많은 메모리를 할당 할 수있는 방법이 있습니까? 시간이 얼마나 걸리거나 영향을받을 수있는 다른 프로세스는 상관 없습니다.
Raspbian Jessie OS를 업데이트했으며 메모리 구성은 다음과 같습니다.
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
여기에 코드
미리 감사드립니다.
Pablo
댓글
- 최종부터 지원되는 Raspbian Buster로 업그레이드하면 어떻게 되나요? of-life Jessie.
답변
실행 시간에 관심이 없다면 스왑 크기를 늘리십시오. 100MB에서 2GB까지 사용 가능한 메모리 양이 3 배로 늘어납니다. 현재 코드 효율성 (16MB 데이터 처리에 1GB 또는 RAM 필요)을 예상하면 한 번에 최대 48MB의 데이터를 처리 할 수 있습니다.
sudo dphys-swapfile swapoff echo "CONF_SWAPSIZE=2048"|sudo tee /etc/dphys-swapfile sudo dphys-swapfile swapon
데이터 처리 알고리즘이 실제로 메모리에 제한되지 않는 한 더 나은 코드를 작성하는 것만으로도 메모리 요구 사항을 크게 줄일 수 있습니다.
댓글
- 훌륭합니다! 스왑 크기를 늘렸고 지금까지 최대 20MB까지 처리 할 수 있었으며 현재 처리 중입니다. T 감사합니다, 드미트리!