UnsplashのAlexKnightによる寫真

序章

お腹を空かせてキッチンに行き、冷蔵庫を開けて、おいしいものを取り出して、飢えたために冷蔵庫を閉めるのを忘れたことがありますか?それとも、夜に家に帰って、ライトの一部がまだ點燈していることはありますか?私たちは皆、このような狀況を知っていると思います。

では、タイトルにPythonについて話したいと書かれているのに、なぜそう言っているのでしょうか。データサイエンティストまたは機械學習の実踐者として、なぜそれを気にするのですか?その理由は、あなたはしばしばそのような狀況に直面するからです。たとえば、貴重なデータを取得するためにデータベースに接続していて、後で接続を閉じるのを忘れた場合です。または、モデルをトレーニングするために巨大なコンピューティングクラスターをセットアップしていて、完了したらモデルを稼働させたままにしておくと仮定します。これらのことは非常にコストがかかり、マネージャーや會社を苛立たせる可能性があります。

これは、冷蔵庫を閉めるのを忘れたり、電気をつけたままにしたりするという私たちの現実の狀況を思い出させます。ハウスキーピングを忘れてしまいました!ソフトウェアの違いは、私たちが物理的に戻ってこないことと、混亂を一掃する2度目のチャンスがあることです。したがって、結果は、システムの速度が低下したり、完全にクラッシュしたりするなど、はるかに深刻になる可能性があります。それについての最悪のことは、これがプログラム內のどこでも発生する可能性があり、必ずしも混亂の原因となるコードの近くにあるとは限らないことです。これは、見つけてデバッグするのが難しい場合があります。

では、これらの狀況に遭遇せず、リソースのクリーンアップを決して忘れないようにするために、Pythonで何ができるでしょうか。

コンテキストマネージャーを使用してください!

この記事では、コンテキストマネージャーの概要とPythonで獨自のコンテキストマネージャーを作成する方法を紹介します。それらを知って適用すると、自動的に行われるため、ハウスキーピングを忘れることはありません。これは確かにコードにのみ適用され、前述の実際の狀況には役立ちません??準備はいいですか?始めましょう!

コンテキストマネージャー

基本コンセプト

リソースの管理は、私たちが時々忘れがちなプログラミングの重要な部分です。リソースが限られた量でのみ利用可能であるものです。例としては、ファイルハンドル、ネットワークソケット、ロックなどがあります。これらのリソースのために、彼らがされていることを確認することが重要である解放あなたがした後に取得してそれらがリリースされていない場合、リソースリークが発生し、システムの速度が低下したりクラッシュしたりする可能性があります。

リソースの管理とは別に、最終的なクリーンアップアクションを実行する必要がある狀況もあります。例としては、データを取得するデータベースへの接続を閉じる、Kafkaにオフセットをコミットする、スケールアップした後にコンピューティングリソースをスケールダウンするなどがあります。後者は、特にモデルトレーニング用の大規模な計算クラスターについて話す場合に、実際のコスト削減になります。

全體として、私たちが探している一般的なパターンがあり、それは次のアクションに分類されます

十分に話して、次のセクションのコードでコンテキストマネージャーの使用がどのように見えるかを見てみましょう。

Pythonコンテキストマネージャーの使用方法

私の仕事では、Python関連のインタビューをたくさん行っています。そこで、私はほとんどの場合、「コンテキストマネージャーとは何ですか?」と人々に尋ねます。興味深いことに、ほとんどのインタビュー対象者は、これまでその用語を聞いたことがないと言っています。しかし、私が彼らに例を示すと、彼らはすべて次のようになります

UnsplashのAfifKusumaによる寫真

「それはコンテキストマネージャーですか?よく使う!」私もここであなたと同じことをしたいです。これが例です

「あぁ」みたいに行きましたか?コンテキストマネージャが何であるかをすでに知っているからではないと思います。そうでなければ、問題ありません。ここで行っていることを簡単に理解しましょう。

この例でopenは、はコンテキストマネージャです。このwithステートメントは、コンテキストマネージャーがオープンアクションとクローズアクションを実行することを確認します。ここで、コンテキストマネージャは指定されたファイルを開きsomething.json,、対応するファイルハンドラを返します。asステートメントを使用して、コンテキストマネージャーの戻り値を変數に割り當てることができます。withブロックを終了すると、コンテキストマネージャーは、障害が発生した場合でも、すべてがクリーンアップされていることを確認します。甘いですね。

では、どのようにしてコンテキストマネージャーを作成できますか?前のセクションでそれをチェックしてみましょう。

コンテキストマネージャーの書き方

コンテキストマネージャーの使用方法を確認した後、さらに1レベル進んで、コンテキストマネージャーの作成方法を見てみましょう。原則として、あなたがしなければならないことは、クラスを書いて、__enter__すべてをセットアップ__exit__し、混亂をクリーンアップするための2つの魔法またはダンダー関數を単に実裝することです。__enter__作成したオブジェクトを句內の変數に割り當てasて後で使用できるように、selfを返すのがベストプラクティスだと思います。

最新のPythonを使用していて、セットアップまたは破棄中に非同期呼び出しを実行する場合は、非同期コンテキストマネージャーを作成する必要があります。幸いなことに、これは同期呼び出しの場合とほぼ同じくらい簡単です。2つの非同期関數__aenter__とを実裝する必要があり__aexit__ます。最後に、非同期コンテキストマネージャーを呼び出すには、を呼び出す必要がありますasync with YourManager() as a:。とても簡単ですね。

さて、これはコンテキストマネージャを書く適切な方法です。しかし、Pythonは、同期と非同期の両方の方法でコンテキストマネージャーを作成するのを容易にする構文糖衣構文を提供しなければ、Pythonにはなりません。あなたがしなければならないのは、単一の関數を書いてデコレータを使うことだけです。かっこいいですね。それで、それがコードでどのように見えるか見てみましょう

ここではtraining_cluster、同期と非同期の両方の方法で呼び出されるコンテキストマネージャーを作成しました。このコンテキストマネージャーは、架空のトレーニングクラスターを起動し、使用後に閉じられていることを確認します。それを達成するために、あなただけという関數を記述する必要がyieldある時點でとしてそれを飾るcontextmanagerか、acontextmanager素晴らしいのPythonからビルトインcontextlibモジュール。これで、2つのトレイン関數に示されているように、withおよびasync withキーワードで使用できます。終わり。それはそれと同じくらい簡単です。

そのアプローチで私が気に入っているのは、何が起こっているのかが非常に明確であるということです。前に來るyieldものはすべてセットアップ部分であり、後のものはすべて分解部分です。分解が常に発生するようにするには、それをfinallyブロックに入れる必要があります。ちなみに、コンテキストマネージャに何も返さないようにyieldする場合は、戻り値なしで使用してください。

最後に、このアプローチの優れている點は、サードパーティのクラスから継承しなくても、コンテキストマネージャーを簡単に提供できることです。これもまた、明確で素晴らしいコードを書くのに役立ちます。

UnsplashのTimMossholderによる寫真

要約

この記事では、Pythonのコンテキストマネージャーとその利點について説明しました。さらに、同期コンテキストマネージャーと非同期コンテキストマネージャーの両方のサンプル実裝と使用法を提供しました。これを使用することは非常に便利であると同時に本當に簡単であることに同意していただければ幸いです。正直に言って、自動的に行われるハウスキーピングは夢が葉うようなものです??

この投稿をフォローしていただきありがとうございます。いつものように、質問、コメント、提案については、ここまたはLinkedIn経由でお気軽にご連絡ください。

提案された投稿

実踐的な強化學習コース—パート1

実踐的な強化學習コース—パート1

ゼロからヒーローまで、一歩一歩。私の強化學習コースへようこそ!??Pythonのコーディング例とチュートリアルを一緒に使用して、基礎から最先端の強化學習(RL)までのこの美しいパスをステップバイステップで歩きましょう!この最初の部分では、この旅に著手するために必要な最低限の概念と理論について説明します。

Algogatorはライブです!

Algogatorはライブです!

AlgorandポートフォリオトラッカーであるAlgogatorが公開されたことをお知らせできることを大変うれしく思います。https://algogator.financeで今すぐお試しください。リリースに伴い、すばらしいチームからいくつかの最終更新がありました。

関連記事

選択によって子供がいない人に言わないこと

選択によって子供がいない人に言わないこと

それで、私はもともと子供がいない友達がいる人のためにこの記事を書きました。ただし、これは誰でも読むことができます。

外國での無駄な日々

外國での無駄な日々

家の分析私がよく人々に話す最初の言葉は、「英語で話してくれませんか?私はその言語を理解していません。」私がどこに行っても、周りに誰がいても、私はいつも私を変えたいと思っている人々の不協和音に囲まれているようです。

すごいSHIBゲームは未來です

すごいSHIBゲームは未來です

ゲームスペースを獲得するためのプレイは、大きな牽引力を獲得しています。そして、最初からそれを行う人は、今後數年間で利益を享受するでしょう。

レオライジング:私たちは皆、彼らになりたい

または少なくとも私たちの生活の中でそれらを持っている:ナタールチャートの側面

レオライジング:私たちは皆、彼らになりたい

あなたは紛れもなく磁気的な性格を持っている人を知っていますか?彼らはレオまたはレオアセンダントです。彼らはかなりの存在感を持っており、彼らは非常に迅速に大衆を魅了します。

MORE COOL STUFF

レディー?ガガがパスタとパンを食べて、「ハウス?オブ?グッチ」の役割のために彼女の體を準備する

レディー?ガガがパスタとパンを食べて、「ハウス?オブ?グッチ」の役割のために彼女の體を準備する

彼女はパトリツィア?レジアーニを演じるためにイタリア文化に沒頭しただけでなく、伝統的なイタリア料理をたくさん食べるようにしました。

「ギルモア?ガールズ」:ローレライとエミリー?ギルモアの間の3つの心溫まる瞬間

「ギルモア?ガールズ」:ローレライとエミリー?ギルモアの間の3つの心溫まる瞬間

ローレライとエミリーギルモアは密接な関係を持っていませんでした。実際、「ギルモア?ガールズ」は彼らの関係を氷のように示しました。それでも、いくつかの暖かい瞬間がありました。

ルシルボールの遺産には、制作會社を経営する最初の女性であることが含まれます

ルシルボールの遺産には、制作會社を経営する最初の女性であることが含まれます

ルシルボールは、エンターテインメント業界のパイオニアです。

Josh Duggar News:受刑者が裁判で証言するのはなぜですか?ダガー家族評論家は理論を持っています

Josh Duggar News:受刑者が裁判で証言するのはなぜですか?ダガー家族評論家は理論を持っています

最近のジョシュダガーのニュースは、受刑者がダガーの裁判で証言するだろうと述べています。ダガー家の批評家は今、彼が誰であるか、そしてその理由についての理論を持っています。

ミニクロスワードをお試しください

ミニクロスワードをお試しください

毎週更新される私たちのミニクロスワードは、私たちのお気に入りのハウスタッフワークスの読みと頭のいい手がかりを組み合わせています!

どれが最も効果的ですか:洗濯ポッド、粉末または液體洗剤?

どれが最も効果的ですか:洗濯ポッド、粉末または液體洗剤?

適切な洗剤を選ぶことを心配することなく、洗濯をすることは十分に悪いことです。では、どちらが最適ですか?それとも重要ですか?

ケンタッキーの青い人々の実話

ケンタッキーの青い人々の実話

ケンタッキー州の田舎に住むFugatesとCombsの家族は、遺伝的寶くじを失いました。どちらも、結婚するにつれて肌が青く見える、まれな劣性形質を共有していました。これの原因は何でしたか?そして、家族はどうなりましたか?

カリフォルニアコンドルの「バージンバース」は種を救うことができますか?

カリフォルニアコンドルの「バージンバース」は種を救うことができますか?

カリフォルニアコンドルを絶滅から救うためのプログラムで、2羽の父親のいないオスのヒナが飼育されています。そのような「処女」の誕生はどのように可能ですか?

ダンガンロンパ3はこれまでのところそれを殺している

ダンガンロンパ3はこれまでのところそれを殺している

最初のエピソードが終わる前に、殺害ゲームは新たに始まりました。私たちはもっと少ないことを予想すべきでしたか?いいえ、結局のところ、それはダンガンロンパシリーズです。

ウラヌスはおならのようなにおいがする

ウラヌスはおならのようなにおいがする

畫像:ライアンFマンデルバウム/ NASA /ウォルターバクスター。科學者はウラヌスについて多くの質問をします。

これは、これまでに記録された最強の熱帯低気圧が宇宙からどのように見えたかです

これは、これまでに記録された最強の熱帯低気圧が宇宙からどのように見えたかです

昨日、NASAのスオミNPP衛星は、これまでに測定された中で最も強力な熱帯低気圧であるハリケーンパトリシアを通過し、この見事な畫像を赤外線でキャプチャしました。ハリケーンパトリシアは昨夜メキシコの太平洋岸に上陸し、今朝早くに熱帯低気圧に格下げされました。

このアニマトロニクスのサメのコスチュームで誰もがたわごとを怖がらせる

このアニマトロニクスのサメのコスチュームで誰もがたわごとを怖がらせる

アルフレッドがダークナイトで指摘したように、世界が燃えるのを見るのが好きな男性もいます。彼らにとって、太陽の下でのんびり過ごすビーチでの一日は特に楽しいものではありません。

サタデーナイトライブコメディアン兼作家ピーターエイクロイドデッド66歳

サタデーナイトライブコメディアン兼作家ピーターエイクロイドデッド66歳

俳優のダンエイクロイドの兄弟であるピーターエイクロイドは、1979年のサタデーナイトライブの1シーズンで作家とキャストの両方のメンバーを務めました。

「攻撃的な癌」の診斷後、ジョー?エキゾティックがノースカロライナ州の醫療施設に移送された

「攻撃的な癌」の診斷後、ジョー?エキゾティックがノースカロライナ州の醫療施設に移送された

タイガーキングスターのジョセフ 'ジョーエキゾティック'マルドナド-パッセージは當初、彼の前立腺癌の診斷を明らかにした後、今月後半に移管されることになっていた

CardiBとOffsetのDaughterKultureがInstagramで美しい新しいブレードを披露

CardiBとOffsetのDaughterKultureがInstagramで美しい新しいブレードを披露

Cardi BとOffsetの3歳の娘、Kultureは、Instagramで彼女の新しい編みこみのヘアスタイルを披露しました。

Languages

野花在线观看免费观看大全-野花视频在线观看免费观看8
国足最新出线概率0.08% 北京冬奥火炬宣传片获金花环奖 速度与激情9 得知母亲出事男子在地铁痛哭 国足战澳大利亚大名单:4归化在列 周冠宇成为中国首位F1车手 安娜贝尔 尚气与十环传奇 胡锡进谈中美元首会晤 红色通缉令 尚气与十环传奇 印度首都准备封城 房价上涨城市创七年新低 拐点来了? 24岁救人牺牲消防员获批为烈士 扫黑风暴 我要我们在一起 意大利错失直接晋级世界杯资格 中美元首会谈重点内容 中国共产党第三个历史决议全文发布 灵媒 意大利错失直接晋级世界杯资格 俄方回应卫星碎片危及国际空间站 中美元首是否达成新共识?中方回应 男子写80页PPT拯救爱情却离婚 动保组织向上饶信州区申请信息公开 许家印为恒大注入超70亿续命资金 动保组织向上饶信州区申请信息公开 千与千寻 意大利错失直接晋级世界杯资格 两个女人 浦发银行回应近3亿存款莫名被质押 罗永浩吐槽苹果文案没文化 大连现超级传播者26人在同一传播链 扫黑风暴 安娜贝尔 中美元首会谈重点内容 长津湖 图兰朵 24岁救人牺牲消防员获批为烈士 房价上涨城市创七年新低 拐点来了? 五个扑水的少年 大连一密接者擅自点外卖聚餐被调查 男子写80页PPT拯救爱情却离婚 #耿直真香哥黑化卖惨# 动保组织向上饶信州区申请信息公开 扫黑风暴 失控玩家 扫黑风暴 许家印为恒大注入超70亿续命资金 外交部回应拜登重申不支持台独 加拿大一枝黄花到底是什么? 中国医生 男子体检血中抽出2升油浆 红色通缉令 大连现超级传播者26人在同一传播链 国际人士热议中共十九届六中全会 俄方回应卫星碎片危及国际空间站 怒火·重案 得知母亲出事男子在地铁痛哭 嘉南传 中美元首是否达成新共识?中方回应 浦发银行回应近3亿存款莫名被质押 斗破苍穹 蜘蛛侠:英雄归来 扫黑风暴 林丹世界排名被正式移除 男子体检血中抽出2升油浆 大连现超级传播者26人在同一传播链 扫黑风暴 林丹世界排名被正式移除 国足战澳大利亚大名单:4归化在列
沁源县| 晋中市| 扬中市| 淳安县| 缙云县| 宜君县| 蚌埠市| 宝鸡市| 潜山县| 上杭县| 罗甸县| 江阴市| 桐柏县| 阿拉尔市| 宾川县| 安达市| 南江县| 久治县| 维西| 临漳县| 平遥县| 镇巴县| 册亨县| 濮阳市|