Я пытаюсь передать объект в качестве аргумента функции задания с помощью apscheduler. Это нормально, но в моем случае я бы хотел изменить одно из его значений и использовать обновленное значение при запуске задания. Вот мой пример кода
import time
import sqlalchemy
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
class MyClass:
def __init__(self, *args, **kwargs):
self.state = kwargs.get('state', "")
jobstores = {
'default': SQLAlchemyJobStore(url='sqlite:///sched.db', tablename='apscheduler_jobs')
}
scheduler = BackgroundScheduler()
scheduler.configure(timezone='Europe/Paris')
scheduler.add_jobstore(jobstores['default'], 'default')
def myFunction(_internals):
print("- in job")
print(_internals.__dict__)
print(".")
if __name__ == "__main__":
scheduler.start()
myInstance = MyClass(state="off")
print(myInstance.__dict__)
j1 = scheduler.add_job(myFunction, trigger='cron', args=[myInstance], second='*/10', max_instances=10, jobstore='default', srv_id="blablabla-x6548710")
try:
# This is here to simulate application activity (which keeps the main thread alive).
while True:
time.sleep(2)
myInstance.__setattr__("state", "running")
print(myInstance.__dict__)
except (KeyboardInterrupt, SystemExit):
print('exit')
scheduler.shutdown()
Вот что я ожидаю:
{'state': 'running'}
{'state': 'running'}
{'state': 'running'}
{'state': 'running'}
{'state': 'running'}
in job
{'state': 'running'}
.
{'state': 'running'}
Но вместо этого у меня есть:
{'state': 'running'}
{'state': 'running'}
{'state': 'running'}
{'state': 'running'}
{'state': 'running'}
in job
{'state': 'off'}
.
{'state': 'running'}
Есть ли способ получить то же самое значение в то время как l oop и работа в то время, когда это срабатывает?
Спасибо, мальчики и девочки