静的ファイルを提供し、XMLRPC 要求に応答する内部のチェリーピー サーバーがあります。すべて正常に動作しますが、1 日に 1 ~ 2 回、この静的ファイルとデータベースを更新する必要があります。もちろん、サーバーを停止し、更新を実行してサーバーを起動するだけです。しかし、XMLRPC 経由でサーバーと通信する他のすべてのコードは切断され、ユーザーはブラウザーで「接続できません」と表示されるため、これはあまりきれいではありません。そして、これにより複雑さが増します-外部の開始/停止/更新コードが必要です。すべての更新はcherrypyサーバー自体で完全に実行できます。
どういうわけかプログラムでcherrypyを「一時停止」して、サーバーの静的な「ビジー」ページになり、誰かがサーバーからファイルAをダウンロードしていて、次に必要なファイルBを更新することを恐れずにデータを更新できるので、彼は異なるファイル バージョン。
これをプログラムで実装しようとしましたが、ここで問題はどこにありますか。Cherrypy はマルチスレッド (そしてこれは良いことです) であるため、グローバルな「ビジー」フラグを導入したとしても、データを更新する前に、すべてのスレッドがすでに既存のタスクを完了するのを待つ何らかの方法が必要です。そのような方法を見つけることができません:(。