2014-04-20 5 views
1

나는 예약 작업이 apscheduler입니다. 지금까지 3 가지 일자리가 있었지만 곧 더 많은 일자리가 생길 것입니다. 내 코드를 확장하는 방법을 찾고 있어요.python apscheduler를 사용하면 작업을 쉽게 실행할 수 있습니까?

현재 각 작업은 자체 .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이고 파이썬 셸에서는 execfile('scheduler.py')을 사용하여 실행합니다.

+0

는 작업의 종류에 따라 다릅니다 기능 :

감사 아준를 호출합니다. 작업이 IO 바운드이면'threading' 모듈을 사용하십시오. 연산 비용이 많이들 경우'다중 처리 '를 사용하십시오. – John

+0

@ 존 내 직업은 계산 상 비쌉니다. 몇 가지 예를 들려 줄 수 있습니까? 또는 당신이 말하는 것에 대한 몇 가지 예를 가르쳐 주시겠습니까? 감사하겠습니다. – jason

답변

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)