2014-03-12 5 views
0

Я хотел бы выполнять функцию каждую секунду. Я использовал APScheduler, и он отлично работает. Тем не менее, существует высокая производительность за счет того, что во время каждого задания я воссоздаю объект, который обрабатывает соединение с сервером. Я хотел бы создать этот объект соединения только один раз в основном потоке, а затем передать его и повторно использовать, когда запускаются задания. Проблема заключается в том, что объект подключения использует DCOM, и я получаю ошибку unmarshallable object.APScheduler и Unmarshallable Objects

Я также проверил бесконечный цикл в сочетании с функцией сна, но я заметил, что время дрейфует в этом случае. Тем не менее, я создаю объект 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() 

я не заметил, время дрейфует с этим подходом.

 Смежные вопросы

  • Нет связанных вопросов^_^