我通过 apscheduler 安排了作业。到目前为止,我有 3 份工作,但很快就会有更多。我正在寻找一种方法来扩展我的代码。
目前,每个作业都是它自己的.py文件,在该文件中,我将脚本变成了一个以run()作为函数名的函数。这是我的代码。
from apscheduler.scheduler import Scheduler
import logging
import job1
import job2
import job3
logging.basicConfig()
sched = Scheduler()
@sched.cron_schedule(day_of_week='mon-sun', hour=7)
def runjobs():
job1.run()
job2.run()
job3.run()
sched.start()
这行得通,现在的代码很愚蠢,但它完成了工作。但是当我有 50 个工作时,代码会很笨。如何扩展它?
注意:作业的实际名称是任意的,不遵循某种模式。该文件的名称是 scheduler.py,我在 python shell 中使用 execfile('scheduler.py') 运行它。
请您参考如下方法:
import urllib
import threading
import datetime
pages = ['http://google.com', 'http://yahoo.com', 'http://msn.com']
#------------------------------------------------------------------------------
# Getting the pages WITHOUT threads
#------------------------------------------------------------------------------
def job(url):
response = urllib.urlopen(url)
html = response.read()
def runjobs():
for page in pages:
job(page)
start = datetime.datetime.now()
runjobs()
end = datetime.datetime.now()
print "jobs run in {} microseconds WITHOUT threads" \
.format((end - start).microseconds)
#------------------------------------------------------------------------------
# Getting the pages WITH threads
#------------------------------------------------------------------------------
def job(url):
response = urllib.urlopen(url)
html = response.read()
def runjobs():
threads = []
for page in pages:
t = threading.Thread(target=job, args=(page,))
t.start()
threads.append(t)
for t in threads:
t.join()
start = datetime.datetime.now()
runjobs()
end = datetime.datetime.now()
print "jobs run in {} microsecond WITH threads" \
.format((end - start).microseconds)
