pickle.dumps报错,求大佬带带弟弟,弟弟不行了
python3.8,nonebot最新,
apscheduler模块最新
最近使用nonebot写了一个小程序,可以定闹钟这样子,用了apscheduler模块,想用sqlite把闹钟储存在本地
'apscheduler.jobstores.default': {
'type': 'sqlalchemy',
'url': database_call, # sql:///D:\\date.db
'tablename': 'apscheduler_jobs'
}
然后这里是apscheduler模块的添加任务的函数,这里最后一行代码就报错了,如何解决呢
_pickle.PicklingError: Can't pickle <function main_clock at 0x041E3610>: it's not the same object as App.plugins.Call_me_now.main_clock
def add_job(self, job):
insert = self.jobs_t.insert().values(**{
'id': job.id,
'next_run_time': datetime_to_utc_timestamp(job.next_run_time),
'job_state': pickle.dumps(job.__getstate__(), self.pickle_protocol)
})
这是由于main_clock函数无法直接通过pickle.dump写入到pkl文件中。你哪里调用了你没发代码,应该时pickle序列化的对象你应该转换一下类型~
dlnb526 发表于 2020-4-5 21:11
这是由于main_clock函数无法直接通过pickle.dump写入到pkl文件中。你哪里调用了你没发代码,应该时pickle序 ...
import datetime
from apscheduler.triggers.date import DateTrigger
from apscheduler.triggers.cron import CronTrigger
from nonebot import on_command, scheduler, CommandSession, message, on_startup
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from config import database_call
# sql:///D:\\date.db
@on_startup
async def scheduler_clock():
call_me = SQLAlchemyJobStore(url=database_call)
scheduler.add_jobstore(call_me, "call")
@on_command('clock', aliases=('闹钟', '定个闹钟'), only_to_me=False)
async def main_clock(session: CommandSession):
time = session.get('time', prompt=r'请问您要定一个几点的闹钟?')
# 制作一个“5分钟后”触发器
delta = datetime.timedelta(minutes=float(time))
trigger = DateTrigger(
run_date=datetime.datetime.now() + delta
)
# 添加任务
scheduler.add_job(
func=session.send,# 要添加任务的函数,不要带参数
trigger=trigger,# 触发器
args=('您定的闹钟时间到了',),# 函数的参数列表,注意:只有一个值时,不能省略末尾的逗号
misfire_grace_time=60,
jobstore='call',
)
await session.send('已经为您订好了一个' + time + '分钟的闹钟')
大佬看看,这是源码,我搞不太定了,淦
页:
[1]