我有一个Python应用程序,从数据库/索引(ElasticSearch)中提取一批2500个被抓取的网站,处理它们,并将它们保存在磁盘上。
这些网站的规模自然会有很大差异。有时我在处理过程中会遇到分段错误错误。我得出的结论是,由于内存不足,我可以通过关闭所有其他应用程序来消除这些错误。
代码看起来像这样:
In [20]: now = datetime.now()
In [21]: dir(now)
Out[21]:
['__add__',...
'astimezone',...
'weekday',
'year']
错误通常发生在from elasticsearch_dsl import Search
from multiprocessing import Pool
s = Search().using(client).index(index)
.query(...).query(...).source([...])
for part, chunk in enumerate(chunks(s.scan(), BATCH_SIZE)):
with Pool(processes = CPU_COUNT) as pool:
result = [hit for hit in pool.map_async(Process(index), chunk).get()]
save_result(result, ...)
def chunks(iterable, size):
iterator = iter(iterable)
for first in iterator:
yield itertools.chain([first], itertools.islice(iterator, size - 1))
行内。 result = [...]
方法只是将拉出的网站的某些字段存储到Process.__call__()
中并将其返回:
dict
问题:是否可以通过分段错误使python 不崩溃?也许让他使用交换?我可以通过某种方式修改代码来防止这种情况吗?