スレッドで問題を解決するためのPythonの正規のタスクが自動的に終了しません。

今日は小さな問題解決タスクスレッドタイミングを共有するすべての人のためにPythonは自動的に終了し、良い基準値、我々は助けを望んでいません。是非、ご覧ください、小さな直列一緒に従うこと
のpythonのスレッドがスケジュールされたタスクを作成するために使用することができるタイマーと呼ばれるクラスを持っているが、しかし、あなたが繰り返したい場合は、問題は、あなただけのタスクタイマーに再び呼び出すことができますされると、それだけで実行することができ、しかし、新たな問題があること、である、メインプロセスが終了した後、子スレッドが正常に終了することはできません。

from threading import Timer
  
  
def scheduletaskwrap():
 pritn "in task"
 Timer(10, scheduletaskwrap).start()
  
Timer(10, scheduletaskwrap).start()

この上記のように、あなたは10秒ごとにスレッドを呼び出すことができますが、全体のプログラムを終了すると、子スレッド

scheduletaskwrap

私たちは、それを行う方法を終了する通知する、実行し続けますか?

モジュールのスレッドのpythonこれらは、比較的簡単な方法は、トラブルの時限タスクのこの種のには適していませんが何であるかイベント、待機、ロックなど、多くの方法を提供します。

最も単純には、グローバル変数を設定し、それをスレッドに変更するかどうかを決定することです。

from threading import Timer
gflag=1
  
def scheduletaskwrap():
 global gflag
 pritn "in task"
 if gflag==1:
  Timer(10, scheduletaskwrap).start()
  
Timer(10, scheduletaskwrap).start()

想像力は素晴らしいです、あなたは、メインプロセスが終了すると、グローバル変数、または1ので、子スレッドに変化、Pythonのいずれかのクラスの通知のための終了メカニズムが存在しないため、実際の実行は、これが動作しないことがわかります。

それを行うには、他の方法はありませんこと?反射に、プロセスので、クラス、グローバル変数を0にデストラクタを加え、グローバル変数の変化をもたらすために使用することができ、一般的に通知するが、ああクラス、クラスデストラクタを終了しませんそれだけです。

class timerexec():
  threadhandle=0
  def __init__(self,thandle): 
    threadhandle=thandle
  def __del__(self): 
    global gflag
    gflag=0
    print u"线程结束",gflag
    threadhandle.cancel
refreshthread=Timer(10, scheduletaskwrap).start()
a=timerexec(refreshthread)

クラスを作成するためのコードを追加するもような場所でのメインプロセスのコールタイマー。

それだけです。
私たちは、高齢者が学習しているかを確認するためにサイトを学ぶのpythonをお勧めします!基本的なPythonスクリプト、爬虫類、ジャンゴ、データマイニング、プログラミング技術から、だけでなく、戦闘にゼロベースのpython小さなパートナーを学ぶすべての愛に与えられたデータ項目を、並べ替え!Pythonのベテランの日が学び、細部に注意を払う必要性にする方法のいくつかを共有するために、技術のタイミングを説明する必要があり、参加するためにクリックしてください私たちの集いのPythonの学習を

Pythonのタイミングタスクスレッド上で、この問題は自動的に終了は、すべての内容全体を共有するための小さなシリーズですができません

发布了49 篇原创文章 · 获赞 63 · 访问量 6万+

おすすめ

転載: blog.csdn.net/haoxun05/article/details/104546124