問題タブ [atexit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python モジュールで atexit によって呼び出されるオブジェクトのクリーンアップと関数のシーケンス
boost-python を使用して、レガシー C++ ライブラリを Python と統合しています。従来のライブラリにはグローバルな初期化がいくつかあり、その中のクラスはアプリケーション全体のデータを使用します。ラップされたすべてのオブジェクトが破棄された後にレガシー ライブラリのシャットダウン関数が呼び出されるようにする必要があり、これは atexit を使用してシャットダウン関数を登録することで実現できると考えました。しかし、atexit がシャットダウン関数を呼び出した後、ラップされたオブジェクトがクリーンアップされ、レガシー ライブラリ内で複数のセグメンテーション違反が発生することがわかりました。
終了する前にラップされたオブジェクトで del を呼び出すことで目的の動作を実現できますが、削除を Python に任せたいと考えていました。オブジェクトのドキュメントにある赤い警告ボックスを確認しました。__del__、私の理想の世界は到達できないのだろうかと思っています。
Python モジュールでレガシー コードをラップするときに、すべてのオブジェクトがクリーンアップされた後にシャットダウン メソッドが確実に呼び出されるようにするための提案はありますか?
重要な場合のプラットフォームの詳細:
- パイソン 2.7.2
- ビジュアル スタジオ 2013
- 64 ビット ビルド
最小限のコード:
コンパイルしたら、これを python を使用して実行し、次の入力と出力を表示できます。
>>> レガシー
legacy::initializeをインポート
>>> test = legacy.Test()
>>> ^Z
legacy::shutdown
legacy::Test::~Test
ruby - Selenium chromedriver が at_exit でうまく動作しない
これは私のコードのバグですか、それとも Selenium や RSpec などのバグですか?
私が書いている Cucumber テストでは、Chrome ドライバーをシャットダウンして再起動する必要があります。ただし、この 2 番目のドライバーを適切にシャットダウンすることはできません。以下の簡略化された例は、問題を示しています: (以下のコードは、Cucumber の複雑さを追加せずに問題を示しているため、RSpec のみです。)
このコードを実行すると、次のエラーが発生します。
ブロックが実行されると、2 番目の chromedriver プロセスが実行されなくなっていることがわかりますat_exit
。これは、シャットダウンの原因となっているメカニズムが何であれ、Chrome ウィンドウを開いたままにするため、問題を引き起こします。
RSpec のafter(:suite)
メカニズムは期待どおりに機能します。Cucumber に対応するメカニズムはありますか (この場合は機能しない 以外at_exit
)? または、ブロックが実行される前に chomedriver が終了しないようにする方法はありますか (そのため、期待どおりにメソッドをat_exit
使用してシャットダウンできます)。quit
最新の Selenium および rspec パッケージを使用して、Mac OS 10.9.5 で Ruby 2.0.0 を実行しています。
python - atexitがファイルに書き込んでいない
atexit
ファイルへの出力を試みて、モジュールが正しく動作するかどうかをテストしています。willの実際の目的はatexit
開いているポートを閉じることですが、これはatexit
そもそもが機能しているかどうかをテストすることです。ただし、atexit
ファイルに印刷されていません。なぜですか?どんな助けでも大歓迎です。
c - プログラムのどこで atexit() を呼び出すかは重要ですか?
基本的に、SDLでプログラムを書いています。
これはコードの一部です:
私の質問は次のとおりです。(game.window == NULL)
C の手続き型の性質を考慮すると、ケースとreturn 1
実行の場合はどうなりますか。プログラムは、このステートメントの後に続く関数をreturn 1
呼び出さずに終了しますか?atexit()
if
プログラムは、ステートメントの の後に関数があるにもかかわらず、両方とも関数内にあるSDL_DestroyWindow()
とを呼び出しますか?SDL_Quit()
atexit()
atexit()
return 1
if (game.window == NULL)
私が理解している限り、C はコードを上から下に実行しatexit()
ますreturn 1
。
python - Python 2.7 で atexit から関数を登録解除できません
まず、flush メソッドを使用して記録クラスを作成しました。
次に、手動で停止したとき、クラッシュしたとき、または何らかの理由で終了時にフラッシュしたかったのです。
だから私は使用しました:
そして、それはかなりうまくいきました。
しかし今、私は、別のバッファサイズと別のパスで、記録、記録の停止、再記録を複数回行いたいと考えています。したがって、破棄してから、いくつかをインスタンス化する必要がありRecorder
ます。ある程度は機能しますが、 oldRecorder
のメモリ (いくつかの fat を含むself._big_buffer̀
) は によって保持されているため、解放されませんatexit
。明示的に呼び出す場合でもdel
。atexit.unregister(self._flush)
Python 3のみなのでできません。
既存のインスタンスを再利用するのではなく、古いインスタンスを破棄して新しいインスタンスを作成したいと考えています。
このような場合、どのように対処しますか?
python - Pythonでsys.exitfuncが機能しない
次の簡単なコードを実行しようとしています
そしてそれは印刷します
「From Test method」が出力されない理由がわかりません
ただし、 atexit を使用しても問題なく動作します
出力
c++ - C++ 終了時に電子メールを送信
私がやろうとしているのは、プログラムを終了するときに電子メールを送信することです。関数を使用atexit();
してこれを行いますが...正しく機能していません。
SendEmail();
関数は時間がかかりすぎて何もしませんか? サーバーの応答も出力しません ( で使用すると正常に動作しますmain();
) 。