


Analisis terperinci pelaksanaan Python bagi tugas berjadual apscheduler
Artikel ini membawakan anda pengetahuan yang berkaitan tentang Python, yang terutamanya memperkenalkan isu yang berkaitan dengan pelaksanaan tugas berjadual Anda boleh menggunakan pakej pihak ketiga untuk mengurus tugasan berjadual Secara relatifnya, apscheduler menggunakan Ia lebih mudah untuk gunakan. Mari kita lihat kaedah penggunaannya semoga bermanfaat kepada semua.
[Cadangan berkaitan: Tutorial video Python3]
Pengenalan pertama kepada apscheduler
Mari kita lihat contoh mudah Lihat cara apscheduler digunakan.
#encoding:utf-8 from apscheduler.schedulers.blocking import BlockingScheduler import datetime def sch_test(): now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') print('时间:{}, 测试apscheduler'.format(now)) task = BlockingScheduler() task.add_job(func=sch_test, trigger='cron', second='*/10') task.start()
Contoh di atas sangat mudah kita perlu mentakrifkan objek apscheduler, kemudian add_job untuk menambah tugasan, dan akhirnya memulakan tugas.
Contohnya ialah menjalankan tugasan sch_test setiap 10 saat Keputusan yang dijalankan adalah seperti berikut:
时间:2022-10-08 15:16:30, 测试apscheduler 时间:2022-10-08 15:16:40, 测试apscheduler 时间:2022-10-08 15:16:50, 测试apscheduler 时间:2022-10-08 15:17:00, 测试apscheduler
Jika kita ingin membawa parameter semasa melaksanakan fungsi tugasan, tambahkan sahaja args dalam. fungsi add_job, Contohnya, task.add_job(func=sch_test, args=('a'), trigger='cron', second='*/10').
Apakah modul yang ada pada apscheduler?
Dalam contoh di atas, kita mempunyai pemahaman awal tentang cara menggunakan apschedulerl. Seterusnya, kita perlu mengetahui rangka kerja reka bentuk apscheduler. apscheduler mempunyai empat modul utama: pencetus, kedai_kerja, pelaksana dan penjadual.
1. Pencetus:
Pencetus merujuk kepada kaedah pencetus yang ditentukan oleh tugasan. Kita boleh memilih salah satu daripada cron, tarikh dan selang.
Cron mewakili tugas berjadual, serupa dengan linux crontab, yang dicetuskan pada masa tertentu.
Parameter yang tersedia adalah seperti berikut:
Selain itu, kami juga boleh menggunakan jenis ekspresi untuk menetapkan cron. Contohnya, yang biasa digunakan ialah:
Contoh penggunaan, dilaksanakan sekali setiap hari pada 7:20:
task.add_job(func=sch_test, args =( 'Tugas bermasa',), trigger='cron',
hour='7', minute='20')
tarikh mewakili tugasan sekali khusus untuk sesuatu masa;
Contoh penggunaan:
# 使用run_date指定运行时间 task.add_job(func='sch_test', trigger='date', run_date=datetime.datetime(2022 ,10 , 8, 16, 1, 30)) # 或者用next_run_time task.add_job(func=sch_test,trigger='date', next_run_time=datetime.datetime.now() + datetime.timedelta(seconds=3))
selang mewakili tugas kitaran, menentukan selang dan melaksanakannya sekali setiap selang.
selang boleh menetapkan parameter berikut:
Contoh penggunaan, laksanakan tugas sch_test setiap 3 saat:
task.add_job(func=sch_test, args=('循环任务',), trigger='interval', seconds=3)。
Mari kita ambil contoh untuk menggunakan ketiga-tiga pencetus:
# encoding:utf-8 from apscheduler.schedulers.blocking import BlockingScheduler import datetime def sch_test(job_type): now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') print('时间:{}, {}测试apscheduler'.format(now, job_type)) task = BlockingScheduler() task.add_job(func=sch_test, args=('一次性任务',),trigger='date', next_run_time=datetime.datetime.now() + datetime.timedelta(seconds=3)) task.add_job(func=sch_test, args=('定时任务',), trigger='cron', second='*/5') task.add_job(func=sch_test, args=('循环任务',), trigger='interval', seconds=3) task.start()
Cetak beberapa hasil:
时间:2022-10-08 15:45:49, 一次性任务测试apscheduler 时间:2022-10-08 15:45:49, 循环任务测试apscheduler 时间:2022-10-08 15:45:50, 定时任务测试apscheduler 时间:2022-10-08 15:45:52, 循环任务测试apscheduler 时间:2022-10-08 15:45:55, 定时任务测试apscheduler 时间:2022-10-08 15:45:55, 循环任务测试apscheduler 时间:2022-10-08 15:45:58, 循环任务测试apscheduler
Melalui contoh kod dan paparan hasil, kita boleh mengetahui dengan jelas fungsi pencetus yang berbeza .
2. Memori tugasan job_stores
Seperti namanya, memori tugasan adalah tempat tugasan disimpan secara lalai . Kami juga boleh menyesuaikan kaedah penyimpanan, seperti menyimpan tugas dalam mysql. Terdapat beberapa pilihan di sini:
Biasanya lalai adalah untuk menyimpannya dalam memori, tetapi jika program gagal dan dimulakan semula, tugas akan ditarik dan dijalankan semula keperluan pelaksanaan adalah tinggi, anda boleh memilih kenangan lain.
Contoh penggunaan storan SQLAlchemyJobStore:
from apscheduler.schedulers.blocking import BlockingScheduler def sch_test(job_type): now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') print('时间:{}, {}测试apscheduler'.format(now, job_type)) sched = BlockingScheduler() # 使用mysql存储任务 sql_url = 'mysql+pymysql://root:root@localhost:3306/db_name?charset=utf8' sched.add_jobstore('sqlalchemy',url=sql_url) # 添加任务 sched.add_job(func=sch_test, args=('定时任务',), trigger='cron', second='*/5') sched.start()
3. pindahkan tugas Letakkannya dalam kumpulan benang atau kumpulan proses untuk dijalankan. Terdapat beberapa pilihan:
Lainnya ialah ThreadPoolExecutor, dan yang biasa digunakan ialah pelaksana kumpulan benang dan proses. Jika aplikasi adalah operasi intensif CPU, ProcessPoolExecutor boleh digunakan untuk melaksanakannya.4. Penjadual penjadual
Penjadual tergolong dalam teras apscheduler Ia memainkan peranan untuk menyelaraskan keseluruhan sistem apscheduler, termasuk memori dan pelaksana , pencetus berjalan seperti biasa di bawah jadualnya. Terdapat beberapa penjadual:
Dalam tiada senario khusus, penjadual yang paling biasa digunakan ialah BlockingScheduler.Pemantauan pengecualian
Apabila ralat berlaku semasa tugas yang dijadualkan berjalan, mekanisme pemantauan perlu disediakan modul log untuk merekod maklumat ralat. Contoh penggunaan:
penggunaan enkapsulasi penjadualfrom apscheduler.schedulers.blocking import BlockingScheduler import datetime from apscheduler.events import EVENT_JOB_EXECUTED , EVENT_JOB_ERROR import logging # logging日志配置打印格式及保存位置 logging.basicConfig(level=logging.INFO, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%Y-%m-%d %H:%M:%S', filename='sche.log', filemode='a') def log_listen(event): if event.exception : print ( '任务出错,报错信息:{}'.format(event.exception)) else: print ( '任务正常运行...' ) def sch_test(job_type): now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') print('时间:{}, {}测试apscheduler'.format(now, job_type)) print(1/0) sched = BlockingScheduler() # 使用mysql存储任务 sql_url = 'mysql+pymysql://root:root@localhost:3306/db?charset=utf8' sched.add_jobstore('sqlalchemy',url=sql_url) # 添加任务 sched.add_job(func=sch_test, args=('定时任务',), trigger='cron', second='*/5') # 配置任务执行完成及错误时的监听 sched.add_listener(log_listen, EVENT_JOB_EXECUTED | EVENT_JOB_ERROR) # 配置日志监听 sched._logger = logging sched.start()
上面介绍了apscheduler框架的主要模块,我们基本能掌握怎样使用apscheduler了。下面就来封装一下apscheduler吧,以后要用直接在这份代码上修改就行了。 【相关推荐:Python3视频教程 】 Atas ialah kandungan terperinci Analisis terperinci pelaksanaan Python bagi tugas berjadual apscheduler. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor
from apscheduler.events import EVENT_JOB_EXECUTED , EVENT_JOB_ERROR
import logging
import logging.handlers
import os
import datetime
class LoggerUtils():
def init_logger(self, logger_name):
# 日志格式
formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
log_obj = logging.getLogger(logger_name)
log_obj.setLevel(logging.INFO)
# 设置log存储位置
path = '/data/logs/'
filename = '{}{}.log'.format(path, logger_name)
if not os.path.exists(path):
os.makedirs(path)
# 设置日志按照时间分割
timeHandler = logging.handlers.TimedRotatingFileHandler(
filename,
when='D', # 按照什么维度切割, S:秒,M:分,H:小时,D:天,W:周
interval=1, # 多少天切割一次
backupCount=10 # 保留几天
)
timeHandler.setLevel(logging.INFO)
timeHandler.setFormatter(formatter)
log_obj.addHandler(timeHandler)
return log_obj
class Scheduler(LoggerUtils):
def __init__(self):
# 执行器设置
executors = {
'default': ThreadPoolExecutor(10), # 设置一个名为“default”的ThreadPoolExecutor,其worker值为10
'processpool': ProcessPoolExecutor(5) # 设置一个名为“processpool”的ProcessPoolExecutor,其worker值为5
}
self.scheduler = BlockingScheduler(timezone="Asia/Shanghai", executors=executors)
# 存储器设置
# 这里使用sqlalchemy存储器,将任务存储在mysql
sql_url = 'mysql+pymysql://root:root@localhost:3306/db?charset=utf8'
self.scheduler.add_jobstore('sqlalchemy',url=sql_url)
def log_listen(event):
if event.exception:
# 日志记录
self.scheduler._logger.error(event.traceback)
# 配置任务执行完成及错误时的监听
self.scheduler.add_listener(log_listen, EVENT_JOB_EXECUTED | EVENT_JOB_ERROR)
# 配置日志监听
self.scheduler._logger = self.init_logger('sche_test')
def add_job(self, *args, **kwargs):
"""添加任务"""
self.scheduler.add_job(*args, **kwargs)
def start(self):
"""开启任务"""
self.scheduler.start()
# 测试任务
def sch_test(job_type):
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print('时间:{}, {}测试apscheduler'.format(now, job_type))
print(1/0)
# 添加任务,开启任务
sched = Scheduler()
# 添加任务
sched.add_job(func=sch_test, args=('定时任务',), trigger='cron', second='*/5')
# 开启任务
sched.start()

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PS "Memuatkan" Masalah disebabkan oleh akses sumber atau masalah pemprosesan: Kelajuan bacaan cakera keras adalah perlahan atau buruk: Gunakan CrystaldiskInfo untuk memeriksa kesihatan cakera keras dan menggantikan cakera keras yang bermasalah. Memori yang tidak mencukupi: Meningkatkan memori untuk memenuhi keperluan PS untuk imej resolusi tinggi dan pemprosesan lapisan kompleks. Pemandu kad grafik sudah lapuk atau rosak: Kemas kini pemandu untuk mengoptimumkan komunikasi antara PS dan kad grafik. Laluan fail terlalu panjang atau nama fail mempunyai aksara khas: Gunakan laluan pendek dan elakkan aksara khas. Masalah PS sendiri: Pasang semula atau membaiki pemasang PS.

Menyelesaikan masalah Permulaan Photoshop Perlahan memerlukan pendekatan berbilang arah, termasuk: menaik taraf perkakasan (memori, pemacu keadaan pepejal, CPU); menyahpasang pemalam yang sudah lapuk atau tidak serasi; membersihkan sampah sistem dan program latar belakang yang berlebihan dengan kerap; menutup program yang tidak relevan dengan berhati -hati; Mengelakkan membuka sejumlah besar fail semasa permulaan.

PS yang tersangkut pada "memuatkan" apabila boot boleh disebabkan oleh pelbagai sebab: Lumpuhkan plugin yang korup atau bercanggah. Padam atau namakan semula fail konfigurasi yang rosak. Tutup program yang tidak perlu atau menaik taraf memori untuk mengelakkan memori yang tidak mencukupi. Naik taraf ke pemacu keadaan pepejal untuk mempercepatkan bacaan cakera keras. Pasang semula PS untuk membaiki fail sistem rasuah atau isu pakej pemasangan. Lihat maklumat ralat semasa proses permulaan analisis log ralat.

<p> Fungsi halaman seterusnya boleh dibuat melalui HTML. Langkah -langkah termasuk: Membuat elemen kontena, memisahkan kandungan, menambah pautan navigasi, menyembunyikan halaman lain, dan menambah skrip. Ciri ini membolehkan pengguna melayari kandungan segmen, memaparkan hanya satu halaman pada satu masa, dan sesuai untuk memaparkan sejumlah besar data atau kandungan. </p>

Alasan pemuatan PS yang perlahan adalah kesan gabungan perkakasan (CPU, memori, cakera keras, kad grafik) dan perisian (sistem, program latar belakang). Penyelesaian termasuk: Menaik taraf perkakasan (terutamanya menggantikan pemacu keadaan pepejal), mengoptimumkan perisian (membersihkan sampah sistem, mengemas kini pemacu, menyemak tetapan PS), dan memproses fail PS. Penyelenggaraan komputer yang kerap juga boleh membantu meningkatkan kelajuan berjalan PS.

"Memuatkan" gagap berlaku apabila membuka fail pada PS. Sebab-sebabnya mungkin termasuk: fail yang terlalu besar atau rosak, memori yang tidak mencukupi, kelajuan cakera keras perlahan, masalah pemacu kad grafik, versi PS atau konflik plug-in. Penyelesaiannya ialah: Semak saiz fail dan integriti, tingkatkan memori, menaik taraf cakera keras, mengemas kini pemacu kad grafik, menyahpasang atau melumpuhkan pemalam yang mencurigakan, dan memasang semula PS. Masalah ini dapat diselesaikan dengan berkesan dengan memeriksa secara beransur -ansur dan memanfaatkan tetapan prestasi PS yang baik dan membangunkan tabiat pengurusan fail yang baik.

Kad PS adalah "Memuatkan"? Penyelesaian termasuk: Memeriksa konfigurasi komputer (memori, cakera keras, pemproses), membersihkan pemecahan cakera keras, mengemas kini pemacu kad grafik, menyesuaikan tetapan PS, memasang semula PS, dan membangunkan tabiat pengaturcaraan yang baik.

Perbezaan utama antara halaman H5 melalui laman web tradisional adalah keutamaan dan fleksibiliti mudah alih mereka, yang lebih sesuai untuk peranti mudah alih dan mempunyai kecekapan pembangunan yang lebih cepat dan keserasian silang platform yang lebih baik. Khususnya, halaman H5 memperkenalkan ciri -ciri baru seperti tag semantik, sokongan multimedia, penyimpanan luar talian, dan lokasi geografi, meningkatkan pengalaman mudah alih.
