1

我有工作安排通过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 个工作时,代码会很长。我如何缩放它?

注意:工作的实际名称是任意的,不遵循模式。该文件的名称是,我在 python shell 中scheduler.py运行它。execfile('scheduler.py')

4

2 回答 2

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)
于 2014-04-20T17:25:58.780 回答
1

看 @

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

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

例如,在导入时,您可以创建一个保持函数调用的列表。

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

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

谢谢阿琼

于 2014-04-20T16:13:07.217 回答