Heim  >  Artikel  >  Backend-Entwicklung  >  Implementierung einer zeitgesteuerten Schleifenausführung von Aufgaben über Python3

Implementierung einer zeitgesteuerten Schleifenausführung von Aufgaben über Python3

anonymity
anonymityOriginal
2019-04-19 13:15:1612861Durchsuche

In unserer tatsächlichen Entwicklung gibt es häufig eine solche Anforderung: Ein bestimmtes Funktionsmodul oder eine bestimmte Aufgabe muss zyklisch innerhalb desselben Zeitraums ausgeführt werden. Hier gibt es ein Konzept eines Timers. Wie sollten wir konkret einen Timer implementieren? Timer verfügen über viele sehr praktische Funktionen, die die Ausführung von Threads steuern, den Systemverbrauch reduzieren usw. können. Lassen Sie uns nun die Implementierung der Timing-Funktion in Python3 üben.

Implementierung einer zeitgesteuerten Schleifenausführung von Aufgaben über Python3

Wenn Sie beispielsweise Python zum Entwickeln eines Crawler-Systems verwenden, müssen Sie möglicherweise Aufgaben in regelmäßigen Abständen wiederholt ausführen, um einen Thread-Dienst zur Überwachung von Daten zu implementieren Im Hintergrund kann der Crawling-Status helfen.

[Videoempfehlung: Python3-Video-Tutorial]

[Handbuchempfehlung: Python-Chinesisch-Handbuch]

Durch Python-Dokumentation Wir finden Sie threading.Timer() zum Implementieren der Timing-Funktion:

Einfacher Implementierungscode:

import threading
def func1(a):
    #Do something
    print('Do something')
    a+=1
    print(a)
    print('当前线程数为{}'.format(threading.activeCount()))
    if a>5:
        return
    t=threading.Timer(5,func1,(a,))
    t.start()

Rendering:

Implementierung einer zeitgesteuerten Schleifenausführung von Aufgaben über Python3

Durch Konsultation der Informationen kann Python verwendet werden, um drei verschiedene geplante Aufgabenausführungsmethoden zu implementieren:

1 Geplanter Aufgabencode

#!/user/bin/env python
#定时执行任务命令
import time,os,sched
schedule = sched.scheduler(time.time,time.sleep)
def perform_command(cmd,inc):
  os.system(cmd)
  print('task')
def timming_exe(cmd,inc=60):
  schedule.enter(inc,0,perform_command,(cmd,inc))
  schedule.run()
print('show time after 2 seconds:')
timming_exe('echo %time%',2)

2. Regelmäßige Ausführung von Aufgaben

#!/user/bin/env python
import time,os,sched
schedule = sched.scheduler(time.time,time.sleep)
def perform_command(cmd,inc):
  #在inc秒后再次运行自己,即周期运行
  schedule.enter(inc, 0, perform_command, (cmd, inc))
  os.system(cmd)
def timming_exe(cmd,inc=60):
  schedule.enter(inc,0,perform_command,(cmd,inc))
  schedule.run()#持续运行,直到计划时间队列变成空为止
print('show time after 2 seconds:')
timming_exe('echo %time%',2)

3 .Loop-Ausführungsbefehl

#!/user/bin/env python
import time,os
def re_exe(cmd,inc = 60):
  while True:
    os.system(cmd)
    time.sleep(inc)
re_exe("echo %time%",5)

Zusammenfassend: Die Methoden von Python zum Implementieren von Timern basieren alle auf Zeitplan und Threading, und die spezifische Verwendung muss entsprechend der tatsächlichen Situation flexibel verwendet werden.

Die beiden am häufigsten verwendeten Module: Threading, Sched

Threading-Modul verwendet:

import threading ,time
from time import sleep, ctime
class Timer(threading.Thread):
        """
        very simple but useless timer.
        """
        def __init__(self, seconds):
                self.runTime = seconds
                threading.Thread.__init__(self)
        def run(self):
                time.sleep(self.runTime)
                print ("Buzzzz!! Time's up!")
class CountDownTimer(Timer):
        """
        a timer that can counts down the seconds.
        """
        def run(self):
                counter = self.runTime
                for sec in range(self.runTime):
                        print (counter)
                        time.sleep(1.0)
                        counter -= 1
                print ("Done")
 
class CountDownExec(CountDownTimer):
        """
        a timer that execute an action at the end of the timer run.
        """
        def __init__(self, seconds, action, args=[]):
                self.args = args
                self.action = action
                CountDownTimer.__init__(self, seconds)
        def run(self):
                CountDownTimer.run(self)
                self.action(self.args)
 
def myAction(args=[]):
        print ("Performing my action with args:")
        print (args)
 
if __name__ == "__main__":
        t = CountDownExec(3, myAction, ["hello", "world"])
        t.start()
        print("2333")

Sched-Modul verwendet:

'''
使用sched模块实现的timer,sched模块不是循环的,一次调度被执行后就Over了,如果想再执行,
可以使用while循环的方式不停的调用该方法
'''
import time, sched
#被调度触发的函数
def event_func(msg):
    print("Current Time:", time.strftime("%y-%m-%d %H:%M:%S"), 'msg:', msg)
def run_function():
    #初始化sched模块的scheduler类
    s = sched.scheduler(time.time, time.sleep)
    #设置一个调度,因为time.sleep()的时间是一秒,所以timer的间隔时间就是sleep的时间,加上enter的第一个参数
    s.enter(0, 2, event_func, ("Timer event.",))
    s.run()
def timer1():
    while True:
        #sched模块不是循环的,一次调度被执行后就Over了,如果想再执行,可以使用while循环的方式不停的调用该方法
        time.sleep(1)
        run_function()
if __name__ == "__main__":
    timer1()

Das obige ist der detaillierte Inhalt vonImplementierung einer zeitgesteuerten Schleifenausführung von Aufgaben über Python3. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn