python apscheduler,一种更简单的方式来运行工作?

时间:2014-04-20 15:50:38

标签: python apscheduler

我通过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')运行它。

2 个答案:

答案 0 :(得分:5)

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)

答案 1 :(得分:1)

看看@

http://furius.ca/pubcode/pub/conf/bin/python-recursive-import-test

这将帮助您导入所有python / .py文件。

导入时

可以创建一个保持函数调用的列表,例如。

[job1.run(),job2.run()]

然后遍历它们并调用函数:)

感谢Arjun