0

我想每秒执行一个函数。我用过APScheduler,效果很好。但是,由于在每个作业期间我都重新创建了处理与服务器的连接的对象,因此性能损失很大。我想在主线程中只创建一次这个连接对象,然后在触发作业时传递它并重用它。问题是连接对象使用DCOM,我得到unmarshallable object错误。

我还测试了结合睡眠功能的无限循环方法,但我注意到在这种情况下时间会漂移。但是,我DCOM只创建了一次对象,性能方面看起来好多了。

是否有解决该unmarshallable object错误的方法并继续使用APScheduler?或者,如果这是不可能的:如何摆脱无限循环方法中的时间漂移​​问题?

4

1 回答 1

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()

我没有注意到这种方法的时间漂移​​。

于 2014-03-20T15:16:33.027 回答