2014-03-12 50 views
0

我想執行一個功能的每一秒。我用APScheduler,它工作正常。然而,有由於每個作業過程中我重新它處理到服務器的連接對象有很大的性能損失。我想在主線程中只創建一次連接對象,然後在作業被觸發時傳遞並重用它。問題是連接對象使用DCOM,我得到unmarshallable object錯誤。APScheduler和Unmarshallable對象

我還測試了一個無限循環的方法有休眠功能相結合,但我注意到時間在這種情況下漂流。不過,我創建了DCOM對象一次和性能明智看起來好了很多。

是否有變通方法unmarshallable object錯誤,並繼續使用APScheduler?或者,如果這是不可能的:我如何擺脫無限循環方法中的時間漂移​​問題?

回答

0

我用threading.Event和保持客戶端在主線程解決這個問題:用這種方法

import threading 
from apscheduler.scheduler import Scheduler 
import logging 

# Start the scheduler 
logging.basicConfig() 
sched = Scheduler() 
sched.start() 

ev = threading.Event() 

# Schedule job_function 
sched.add_interval_job(job, Ts, args=[ev]) 

while True: 
    ev.wait() 
    # do stuff with the unmarshallable object 

    ev.clear() 

def job(ev): 
    ev.set() 

我沒有注意到時間漂移。