ダウンロード可能なデータ管理 (astropy.utils.data

序言:序言

Astropyの多くのツールは、気まずいほど大きなデータセット(例えば、 solar_system_ephemeris )または定期的に更新される(例えば、 IERS_B )または両方(例えば、 IERS_A )である。このようなデータは天文学ではかなりよく見られる--ネットワーク上で提供される権威的なデータは、時々更新される可能性がある。したがって,Astropyプロジェクトはこれらのデータを処理するためのいくつかのツールを提供する.

The primary tool for this is the astropy cache. This is a repository of downloaded data, indexed by the URL where it was obtained. The tool download_file and various other things built upon it can use this cache to request the contents of a URL, and (if they choose to use the cache) the data will only be downloaded if it is not already present in the cache. The tools can be instructed to obtain a new copy of data that is in the cache but has been updated online.

♪the astropy キャッシュは集中位置に格納されています(Linux計算機では、デフォルトの場合は $HOME/.astropy/cache じゃあね。 システムを構成する (astropy.config ) もっと詳しい情報を知っています)。あなたの機械でその位置をチェックすることができます:

>>> import astropy.config.paths
>>> astropy.config.paths.get_cache_dir()  
'/home/burnell/.astropy/cache'

この集中化は,キャッシュが永続的であり,すべてのユーザ間で共有されることを意味する. astropy 1台のコンピュータ上の1人のユーザによって任意のVirtualenvで実行される(ホームディレクトリが複数のコンピュータ間で共有されている場合、より多く実行される可能性がある)。これは非常に加速します astropy 動作し,IERSのようなサーバ上の負荷を削減し,これらのサーバは高Webトラフィックのために設計されていない.キャッシュ内のデータが破損または有効期限が切れていることが発見された場合、エントリを削除するか、コンテンツ全体をクリアすることができ clear_download_cache それがそうです。

キャッシュディレクトリ内のファイルは、そのURLの暗号化ハッシュに基づいて命名されている(現在MD 5であるため、これによるセキュリティリスクはたかだか些細なものであるにもかかわらず、原則として悪意のあるエンティティが衝突を引き起こす可能性がある)。これらのファイルの修正時間は、通常、Internetから最後にダウンロードされた時間を表す。

Astropyの使い方

ほとんどの場合、キャッシュ機構を無視することができ、依存することができます astropy あなたが必要な時に正しいデータを持っています。例えば,正確な時間変換や空位置にはIERSからの地球自転測定テーブルが必要である。このテーブルは IERS_Auto その多くの計算にインフラが提供されている。それは、あなたが要求した時間がそのテーブルがカバーする時間よりも遅い場合、IERSから更新されたテーブルをダウンロードする利用可能な地球自転パラメータを提供します。したがって、例えば、UT 1(地球自転不規則性を反映した時間スケール)を問い合わせる時間は、IERSデータのダウンロードをトリガする可能性がある:

>>> from astropy.time import Time
>>> Time.now().ut1  
Downloading https://maia.usno.navy.mil/ser7/finals2000A.all
|============================================| 3.2M/3.2M (100.00%)         1s
<Time object: scale='ut1' format='datetime' value=2019-09-22 08:39:03.812731>

しかし2回目の実行には新しいダウンロードは必要ありません

>>> Time.now().ut1  
<Time object: scale='ut1' format='datetime' value=2019-09-22 08:41:21.588836>

いくつかのデータは Astropy data server 内部で使うこともできます astropy あるいはあなたの都合のために。これらの機能はより便利に get_pkg_data_* 機能:

>>> from astropy.utils.data import get_pkg_data_contents
>>> print(get_pkg_data_contents("coordinates/sites-un-ascii"))  
# these are all mappings from the name in sites.json (which is ASCII-only) to the "true" unicode names
TUBITAK->TÜBİTAK

Astropy外部からの使い方

ユーザー.ユーザー astropy 利用することもできます astropy キャッシュとダウンロード機構です。最も簡単な形式では、これは使用に相当します。 download_filecache=True パラメータは、キャッシュからそのデータを取得する(データがキャッシュにある場合):

>>> from astropy.utils.iers import IERS_B_URL, IERS_B
>>> from astropy.utils.data import download_file
>>> IERS_B.open(download_file(IERS_B_URL, cache=True))["year","month","day"][-3:]  
 <IERS_B length=3>
 year month  day
int64 int64 int64
----- ----- -----
 2019     8     4
 2019     8     5
 2019     8     6

ユーザがキャッシュをより新しいバージョンのデータに更新したい場合(ここのデータはすでに最新であり、ユーザはいつ新しいバージョンを取得するかを自分で決定しなければならないことに注意されたい)、彼らは使用することができる cache='update' 論拠::

>>> IERS_B.open(download_file(IERS_B_URL,
...                           cache='update')
... )["year","month","day"][-3:]  
Downloading http://hpiers.obspm.fr/iers/eop/eopc04/eopc04_IAU2000.62-now
|=========================================| 3.2M/3.2M (100.00%)         0s
<IERS_B length=3>
 year month  day
int64 int64 int64
----- ----- -----
 2019     8    18
 2019     8    19
 2019     8    20

主要なデータソースが過負荷または利用できない可能性があることを心配している場合、使用することができる sources パラメータは,その中からダウンロードしようと試みるソースリストを順に提供する.これは元の源を含む必要はない。いずれにしても、データは、キャッシュに要求された元のURLに格納される。

>>> f = download_file("ftp://ssd.jpl.nasa.gov/pub/eph/planets/bsp/de405.bsp",
...     cache=True,
...     sources=['https://data.nanograv.org/static/data/ephem/de405.bsp',
...              'ftp://ssd.jpl.nasa.gov/pub/eph/planets/bsp/de405.bsp'])  
Downloading ftp://ssd.jpl.nasa.gov/pub/eph/planets/bsp/de405.bsp from https://data.nanograv.org/static/data/ephem/de405.bsp
|========================================|  65M/ 65M (100.00%)        19s

キャッシュ管理

キャッシュは永続的であるため,不便に大きくなったり,関連しないデータで満たされたりする可能性がある.ディスク上のディレクトリにすぎないが、各ファイルは1つのURLの内容を表すべきであり、多くのURLは、ディスク上のファイル名(例えば、“:”~“のような面倒な文字を含む)を受け入れられない。心配する理由がある astropy また,キャッシュにアクセスするプロセスはキャッシュが破損する可能性がある.そこで,データはURLのハッシュで命名されたサブディレクトリに格納され,問題の合併を防ぐように書き込みアクセスを処理する.したがって,提供されたいくつかのブースタを用いてキャッシュにより容易にアクセスすることができる. data それがそうです。

キャッシュの実行が異常であれば、ご利用いただけます check_download_cache キャッシュ内容をチェックし,何か異常が発見された場合に異常を引き起こす.単一のファイルが必要または破損していない場合は、呼び出しによって clear_download_cache パラメータは、ファイルのURL、ダウンロードファイルのファイル名、またはそのコンテンツを取得するハッシュであってもよい。もしキャッシュが深刻に破損していたら clear_download_cache パラメータを持たずにディレクトリ全体を直接削除し,空間を解放し,一致しないデータを削除する.もちろん、これら2つのツールのいずれかを使用してデータを削除する場合、現在データを使用しているどのプロセスも中断される可能性があります(または、Windowsでは、これらのプロセスが終了する前にキャッシュを削除できない可能性があります)。だから使うのは clear_download_cache 気をつけて。

キャッシュが占有する総スペースをチェックしますので、ご利用ください cache_total_size それがそうです。リストキャッシュのコンテンツを使用することができます get_cached_urls また,以下のコマンドを用いてキャッシュに特定のURLが存在するかどうかをテストすることができる. is_url_in_cache それがそうです。以下のコマンドを用いてより一般的な動作を実行することができる cache_contents それは1つに戻ります dict URLをその内容のディスクファイル名にマッピングする.

キャッシュが別のコンピュータに送信される場合、または後の使用のためにそのコンテンツが保持される場合、関数を使用することができる。 export_download_cache キャッシュされたコンテンツの一部または全部をリストするZIPファイルを生成し、 import_download_cache ロードします astropy このようなZIPファイルからキャッシュする.

Astropyキャッシュはフォーマットを変更しました--1回はPython 2からPython 3への変換であり、もう1つはAstropyバージョン4.0.2の前に、いくつかの計算クラスタに発生するいくつかの同時問題を解決します。キャッシュの各バージョンは自分のサブディレクトリにあるので、古いバージョンは新しいバージョンに干渉することはありませんが、その逆もありますが、このバージョンはそれらのコンテンツを使用することもなく、それらのコンテンツをクリアすることもありません。 clear_download_cache それがそうです。これらの古いキャッシュディレクトリを削除するには、以下のように実行することができます。

>>> from shutil import rmtree
>>> from os.path import join
>>> from astropy.config.paths import get_cache_dir
>>> rmtree(join(get_cache_dir(), 'download', 'py2'), ignore_errors=True)  
>>> rmtree(join(get_cache_dir(), 'download', 'py3'), ignore_errors=True)  

Astropyは、インターネットアクセスが制限されている場合、またはアクセスできない場合に使用される

ご利用になりたいかもしれません astropy 厳しいファイアウォールの後ろにある望遠鏡制御機ですあるいは、持続的統合(CI)を実行している場合があります astropy サーバは、各アーキテクチャの各引き出し要求時に天文サーバを叩くことを回避することが望ましい。あるいはアメリカ政府や軍のネットワークサーバにアクセスできないかもしれませんどんな状況でも、あなたは避けなければならないかもしれません astropy インターネットからのデータが必要です。現在、この問題には簡単で完全な解決策はないが、この問題を解決するのを助けるいくつかの道具がある。

あなたのプロジェクトが具体的にどのような外部データに依存するかは astropy どのように使用し、どのように使用しますか。最も一般的な解決策は、定期的に更新されたIERSデータのような最新バージョンのファイルを含む必要なすべてのデータファイルを含む、インターネットにアクセス可能なコンピュータを使用してあるバージョンの計算を実行することである。そして,この接続された機器上のキャッシュに必要なすべてのコンテンツがロードされると,中間機,携帯型ディスクドライブ,他のツールを介して複製を行うために,任意の利用可能な方法を用いてキャッシュコンテンツをターゲット計算機に転送することができる.キャッシュディレクトリ自体は,同じUNIXスタイルを持つ計算機間である程度移植することができ,CIシステムが2回の実行間でそのディレクトリをキャッシュするように説得できれば十分である可能性がある.しかし、より良い移植性を得るためには、簡単にご利用いただけます export_download_cache そして import_download_cache これらは、移植可能であり、既存のキャッシュディレクトリにファイルを追加することを可能にする。

アプリケーションが特にIERSデータを必要とする場合、適切な時間スパンをカバーするために、便利だと思う任意の方法で適切なIERSテーブルをダウンロードすることができます。そして、このファイルをアプリケーションにロードし、結果テーブルを使用することができます。 IERS_Auto それがそうです。実際、IERS Bテーブルは十分小さく、1つのバージョン(必ずしも最新とは限らない)がバンドルされている。 astropy として astropy.utils.iers.IERS_B_FILE それがそうです。特定の非自動表を使用するもう1つの利点は、アプリケーションが使用しているIERSデータのバージョンを正確に制御できることです。別項参照 オフライン作業. それがそうです。

もしあなたの質問が特定のサーバーに関連していたら、たとえそれらが astropy 一般に使用され、どのファイルが必要か(または以下の場合にのみピックアップ)が必要であるかを正確に予測することができる場合 astropy これらのファイルを取得することができません)、これらのファイルを他の場所で利用可能にするために、以下のコマンド要求を使用してキャッシュにダウンロードすることができます。 download_filesources パラメータ設定は有効な位置を知ることができます。設定することもできます sources 空のリストに追加して download_file インターネットを利用しようとはしませんでした

特定のURLがご迷惑をおかけした場合、他のツールを使用してダウンロードすることができます(例えば、 wget )は別のコンピュータで使用されるかもしれません import_file_to_cache それがそうです。

Astropyデータとクラスタ

天文計算は、通常、共有マスターファイルシステムを有する異なる機械上で大量の異なるプロセスを使用する必要がある。これはある程度の複雑さをもたらすかもしれない。特に、複数の異なるプロセスが1つのファイルを同時にダウンロードしようとすると、サーバを過負荷させたり、セキュリティシステムをトリガしたりする可能性がある。ホームディレクトリへの並列アクセスは,これらの問題を最小限にすることを試みているにもかかわらず,Astropyデータキャッシュで合併問題をトリガすることも可能である.そこで、私たちは以下の基準を提案します。

  • 簡単な足の元の設定を作ります astropy.utils.iers.conf.auto_download = True 次に、ソース名ルックアップおよびIERSテーブルを含む、コードにアクセスするために必要なすべてのキャッシュリソース。時々ヘッドノードで動作します(タイムアウトを超える頻度で十分です astropy.utils.iers.conf.auto_max_age すべてのデータが最新であることを保証するために、デフォルトは30日)である。

  • Astropyプロファイルの作成(参照) システムを構成する (astropy.config ) )その手は astropy.utils.iers.conf.auto_download = False これにより,作業者は突然期限切れの表に気づかず,狂ったようにダウンロードしようとする.

  • または、このファイルに設定する astropy.utils.data.conf.allow_internet = False 作業ノードから任意のファイルをダウンロードする試みを防止するために、そうする場合、実際にダウンロードされたスクリプトを実行する際に、この設定を上書きする必要がある。

今、あなたの作業ノードはInternetから何も取得する必要はなく、すべてが順調に実行されるべきです。