6

Pythonで高度に統合されたコードを作成するのは簡単なので、コードが変更されたときにアプリケーションを終了して再起動する必要はありません。どのようにアプリケーションを終了する必要なく自己更新することができますPythonコードを記述するには?

ただし、コードの一部を分離して終了して再起動する必要なくオンザフライで更新できるようにするには、必ずいくつかの戦略とモデルが存在する必要があります。

多くの機能に取り組んでいるアプリケーションでは、メインアプリケーションが話す独立したバックグラウンドタスクであり、ステータス情報を表示し、現在の状態に基づいてタスクを実行するよう指示します。多くの意味で、これらのバックグラウンドタスクは独立したプログラムとして見ることができます。主なアプリケーションや他のツール、タスクなどとコードベースの一部を共有するだけです。

シバン全体を更新可能にするのは難しいかもしれませんが、アップデートを公開し、必要に応じて実行中のコードに気付いて更新する方法があるはずです。

私はマルチスレッド化とasyncio(Python 3.5)を利用することにも興味があり、ステートレスなものを作ることを模索しているので、いくつかの面白いことを論理的に行うことができます新しいコードを展開する際にハード強制的に再起動します。

このヒントを作成する方法に関するヒントと参考になることを非常に感謝します。

+3

[この質問](https://stackoverflow.com/questions/437589/how-do-i-unload-reload-a-python-module) – CoryKramer

+0

ありがとう@CoryKramer、それはまさに私が探している情報の種類。ブリリアント、これは私が最初に想像したよりも簡単かもしれません:) – tsvenson

+1

フラスコと竜巻はどちらもこのような特徴を持っていると私は信じています。 – dano

答えて

2

モジュールをリロードする組み込み関数reload()がありますが、それは簡単です。古いバージョンのモジュールで作成されたオブジェクトへの参照を保持するものについては十分に注意しなければならず、モジュールをリロードするときにそれらを置き換えるようにしてください。

私はDjangoをたくさん使います。デバッグモードでWebサーバーを実行しているときは、ソースファイルが変更されるたびにWebサーバープロセス全体がリロードされます。手動での再起動と1つのモジュールの再読み込みの間には良い妥協点があります。

私はそれを使用しませんでしたが、watchdogはファイルシステムを監視してリロードをトリガーするのに役立ちます。

関連する問題