Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。4万件41Pythonはほとんど使いませんが、友人のコードを見ていて変な箇所を見つけて調べて問題にあたりました。"helohelo"t=threading.Timer(5,hello)t.start()というものがあります。5秒後に別スレッドでhello()を実行します。t.start()t=threading.Thread(target=hello)t.start()これに違和感を覚えます。hello()の中でまた5秒後に別スレッドを作りhello()を実行するコードが入っています。これを実行したら次々スレッドが生成されて、やがてリソースを食いつぶしてプログラムが落ちるのではないかと思うのですが、いかがでしょうか?あれこれ調べていてhttp://www.webscalability.com/blog/2016/02/simple-example-of-using-the-threading-timer-class-in-python/でも同じようにincの中でincを呼び出しています。自分で簡単なコードを書いてみました。helohelo!!でした。Threadの名前は毎回異なっていて別スレッドが作られているようですが、スレッドの数自体は2から増えていないののでこれで問題ないのでしょうか?追記:再帰呼び出しの形になっていますが、別スレッドで動いているためthreading.Timer(1,hello)の直後に親スレッドは消えてしまうことによってこのコードは安定して動いていると言うことでしょうか?こういう書き方はスレッド生成元が子スレッドの終了を見て再起動させるとか、スレッドの中で無限ループ+sleepさせるよりスマートなのかも知れません。|2以下のコードを書いてみました。秒間のスリープを挟んでいます。新規スレッドの作成を関数の最後にしてしまうと同じことになってしまいます。「末尾で自分自身を別スレッドで走らせる」のではなく、タイマーに登録した関数の最初で別スレッドを作成して実行を開始する方が「タイマー機能の正確さが無限ループ+スリープよりは向上する」という意味では適しているかと思います。クラスを継承したクラスを作成するという方法もあります。多重実行のチェックなどはしていないので不完全ですが、参考までにどうぞ。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。会を開催します🎉サイトの未翻訳箇所を見つけて、もくもく会で直しましょう関連する質問4Pythonで__instancecheck__メソッドが呼び出されない0__init__が呼び出されずAttributeErrorと表示される。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。