SQLAlchemyJobstore 返回“TypeError:无法在 Flask 应用程序中腌制‘SSLContext’对象”

问题描述

在我的代码中实现 sqlAlchemyJobStore 后我遇到了问题。 尝试添加作业会导致以下错误:TypeError: cannot pickle 'SSLContext' object。 我已经阅读了所有文档并尝试了类似问题提到的所有修复,但没有结果(例如 https://github.com/agronholm/apscheduler/issues/421)。

我的代码如下:

在views.py中:

@app.before_first_request
def schedule_jobs():
 
    scheduler = BackgroundScheduler(
        jobstores={'default': sqlAlchemyJobStore(url='sqlite:///jobs.sqlite')}
    )
    scheduler.start()
    data = Data()
    scheduler.add_job(data.schedule_app,trigger='interval',hours=int(os.getenv('UPDATE_FREQUENCY')))

在 data.py 中:

class Data:

    def __init__(self):
        self.ssl_context = ssl.SSLContext()

    def __getstate__(self):
        state = self.__dict__.copy()
        del state['ssl_context']
        return state

    def __setstate__(self,state):
        self.__dict__.update(state)
        self.ssl_context = ssl.SSLContext()

    def schedule_app(self):
        print("Task added Successfully")

添加setstategetstate 作为上述类似问题修复的一部分。即使在类中只有 schedule_app,我仍然得到相同的结果。

完整跟踪:

2021-04-03T10:18:48.206620307Z Traceback (most recent call last):
2021-04-03T10:18:48.206623307Z   File "/tmp/8d8f6862c98e628/antenv/lib/python3.8/site-packages/flask/app.py",line 2447,in wsgi_app
2021-04-03T10:18:48.206626507Z     response = self.full_dispatch_request()
2021-04-03T10:18:48.206629507Z   File "/tmp/8d8f6862c98e628/antenv/lib/python3.8/site-packages/flask/app.py",line 1945,in full_dispatch_request
2021-04-03T10:18:48.206632707Z     self.try_trigger_before_first_request_functions()
2021-04-03T10:18:48.206635807Z   File "/tmp/8d8f6862c98e628/antenv/lib/python3.8/site-packages/flask/app.py",line 1993,in try_trigger_before_first_request_functions
2021-04-03T10:18:48.206638907Z     func()
2021-04-03T10:18:48.206641807Z   File "/tmp/8d8f6862c98e628/app/views.py",line 39,in schedule_jobs
2021-04-03T10:18:48.206644907Z     scheduler.add_job(data.schedule_app,2021-04-03T10:18:48.206647807Z   File "/tmp/8d8f6862c98e628/antenv/lib/python3.8/site-packages/apscheduler/schedulers/base.py",line 448,in add_job
2021-04-03T10:18:48.206650907Z     self._real_add_job(job,jobstore,replace_existing)
2021-04-03T10:18:48.206653807Z   File "/tmp/8d8f6862c98e628/antenv/lib/python3.8/site-packages/apscheduler/schedulers/base.py",line 872,in _real_add_job
2021-04-03T10:18:48.206656907Z     store.add_job(job)
2021-04-03T10:18:48.206659807Z   File "/tmp/8d8f6862c98e628/antenv/lib/python3.8/site-packages/apscheduler/jobstores/sqlalchemy.py",line 95,in add_job
2021-04-03T10:18:48.206662907Z     'job_state': pickle.dumps(job.__getstate__(),self.pickle_protocol)
2021-04-03T10:18:48.206665907Z TypeError: cannot pickle 'SSLContext' object

有没有办法解决这个问题?

我使用 sqlAlchemyJobStore 只是为了避免在多个实例中有多个工作人员执行计划作业(我在 Azure 中使用 8 个实例并遵循 Gunicorn 配置运行此应用程序:

gunicorn -w 8 --preload --worker-class gevent

有没有什么方法可以在不使用 sqlAlchemyJobStore 的情况下实现这一点?

提前致谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...