鱼C论坛

 找回密码
 立即注册
查看: 916|回复: 2

pickle.dumps报错,求大佬带带弟弟,弟弟不行了

[复制链接]
发表于 2020-4-5 20:15:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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)
        })

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-5 21:11:39 | 显示全部楼层
这是由于main_clock函数无法直接通过pickle.dump写入到pkl文件中。你哪里调用了你没发代码,应该时pickle序列化的对象你应该转换一下类型~

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 20:51:39 | 显示全部楼层
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 + '分钟的闹钟')
大佬看看,这是源码,我搞不太定了,淦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 01:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表