Rumah pembangunan bahagian belakang Tutorial Python 通过Python3实现任务的定时循环执行

通过Python3实现任务的定时循环执行

Apr 19, 2019 pm 01:15 PM
python3 threading time

在我们的实际开发中,经常有这样的一种需求:要求某个功能模块或任务在相同的时间周期内进行循环执行。这里有了一个定时器的概念,具体而言我们应该如何去实现一个定时器呢?定时器有许多很实用的功能,能够控制线程的执行、减少系统的消耗等。现在我们来动手实践实现Python3中的定时功能吧。

通过Python3实现任务的定时循环执行

比如使用Python在进行爬虫系统开发时可能就需要间隔一段时间就重复执行的任务的需求,从而实现一个线程服务在后台监控数据的抓取状态,这里定时器就可以帮忙了。

【视频推荐:Python3视频教程

【手册推荐:Python中文手册

通过Python的文档我们可以找到threading.Timer()来实现定时功能:

简单实现代码:

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()
Salin selepas log masuk

效果图:

360截图17981126696374.png

通过查阅资料,利用Python能实现三种不同的定时任务执行方式:

1.定时任务代码

#!/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)
Salin selepas log masuk

2.周期性执行任务

#!/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)
Salin selepas log masuk

3.循环执行命令

#!/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)
Salin selepas log masuk

总结而言:Python实现定时器的方法都是schedule和threading的实现,具体的用法还要根据实际情况灵活运用。

最常用的两个模块:threading、Sched

threading模块使用:

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")
Salin selepas log masuk

Sched模块使用:

'''
使用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()
Salin selepas log masuk

Atas ialah kandungan terperinci 通过Python3实现任务的定时循环执行. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Pemprosesan jam monotonik pakej masa Pemprosesan jam monotonik pakej masa Aug 04, 2023 pm 05:45 PM

Hari ini kita akan melihat kaedah penggunaan masa pakej masa golang. Peraturan umum antara kedua-duanya ialah "masa dinding" digunakan untuk memberitahu masa, dan "jam monotonik" digunakan untuk mengukur masa terdapat kaedah pemprosesan jam lain.

Cara menggunakan Java8 Time API Cara menggunakan Java8 Time API Apr 28, 2023 pm 12:25 PM

1. Gambaran Keseluruhan Sebagai sebahagian daripada artikel ini, mari kita mulakan dengan beberapa masalah dengan Date dan CalendarAPI sedia ada dan meneroka cara Java8Date dan TimeAPI baharu menyelesaikan masalah ini. Kami juga akan melihat kelas teras dalam perpustakaan kelas masa Java8, seperti LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Tempoh, Tempoh dan API mereka. 2. Masalah keselamatan benang API lama (sebelum Java 8)-Kelas Tarikh dan Kalendar tidak selamat untuk benang, menyukarkan pembangun untuk menyahpepijat masalah konkurensi API ini dan perlu menulis kod tambahan untuk menanganinya .

Bagaimana untuk mendapatkan dan menukar masa dalam modul masa Python Bagaimana untuk mendapatkan dan menukar masa dalam modul masa Python May 13, 2023 pm 12:19 PM

Pemerolehan dan penukaran masa modul Pythontime Pustaka Masa Python boleh melakukan pemprosesan berkaitan masa, seperti mengakses tarikh dan masa semasa, mengeluarkan masa dalam format yang berbeza dan menunggu masa tertentu. 1. Dapatkan masa 1.1. Timestamp importtimestamp=time.time()#1682737552.5009851 Greenwich Mean Time (GMT) Jumlah bilangan saat dari 00:00:00 pada 1 Januari 1970 hingga 1.2 masa berstruktur masa sekarang. localtime()#time.struct_time(tm_year=2

Apakah perbezaan dan penggunaan antara masa dan datetime dalam python Apakah perbezaan dan penggunaan antara masa dan datetime dalam python May 02, 2023 am 11:01 AM

1. Dua cara untuk mewakili masa dalam Python: cap waktu: offset dalam saat berbanding 1970.1.100:00:00, time tuple struct_time unik: sejumlah 9 elemen>tm_year: tahun 1-12> tm_mon: bulan 1-12> tm_mday: hari 1-31>tm_hour: jam 0-23>tm_min: minit 0-59>tm_sec: kedua 0-59>tm_wday: minggu 0-6 (0 bermaksud Ahad)>tm_day: Hari dalam tahun 1-366> tm_isdst: sama ada penjimatan siang hari, lalainya ialah -1.ti

Menggunakan Threading untuk pengurusan thread dalam pembangunan API Java Menggunakan Threading untuk pengurusan thread dalam pembangunan API Java Jun 18, 2023 am 08:55 AM

Java ialah bahasa pengaturcaraan yang berkuasa dengan perpustakaan API yang kaya yang boleh membantu kami membangunkan aplikasi dengan cepat. Dalam pembangunan JavaAPI, menggunakan Threading untuk pengurusan thread tidak dapat dielakkan, kerana pengurusan thread ialah isu teras dalam aplikasi Java. Artikel ini akan memperkenalkan cara menggunakan Threading untuk pengurusan thread. 1. Apakah Threading dalam JavaAPI? Pertama, fahami apa itu Threading. di Jawa

Bagaimana untuk memasang pip dalam python3 Bagaimana untuk memasang pip dalam python3 Dec 20, 2023 pm 05:42 PM

Langkah pemasangan: 1. Pastikan Python3 telah dipasang dan boleh diakses melalui baris arahan 2. Buka terminal dan masukkan arahan "python3 -m ensurepip --upgrade" untuk memasang pip; daripada tapak web rasmi Python;

Adakah anda mempunyai kaedah praktikal untuk melengkapkan penukaran antara skrip Python3 dan Python2 dalam satu saat? Adakah anda mempunyai kaedah praktikal untuk melengkapkan penukaran antara skrip Python3 dan Python2 dalam satu saat? Apr 15, 2023 am 09:31 AM

Terdapat beberapa perbezaan dalam sintaks dan penggunaan modul antara Python2 dan Python3 (tidak dijelaskan secara terperinci di sini. Adalah disyorkan bahawa orang baru menggunakan python3 secara langsung untuk menulis kod. Dalam kerja sebenar, banyak operasi dan penyelenggaraan atau skrip ujian masih berjalan secara berterusan menggunakan python2 Apabila kita menghadapi kerja kelompok yang perlu menukar python3 kepada python2 (atau menukar python2 kepada python3), bagaimana kita perlu menanganinya ? Bagaimana pula dengan mengubah suai kod baris demi baris Jawapannya tidak. python2 ke python3Python3.7 (didatangkan dengan alat penukaran C: Python37Toolss

Gunakan fungsi PHP 'masa' untuk mengembalikan cap masa UNIX semasa Gunakan fungsi PHP 'masa' untuk mengembalikan cap masa UNIX semasa Jul 25, 2023 pm 04:42 PM

Gunakan fungsi PHP "masa" untuk mengembalikan cap masa UNIX semasa Cap masa UNIX merujuk kepada jumlah bilangan saat sejak 0:00:00 pada 1 Januari 1970 Coordinated Universal Time (UTC). Dalam PHP, anda boleh menggunakan fungsi terbina dalam "masa" untuk mendapatkan cap masa UNIX semasa. Artikel ini menerangkan cara menggunakan fungsi ini dan menyediakan contoh kod yang sepadan. Contoh kod: <?php$timestamp=time();echo" semasa

See all articles