Giter VIP home page Giter VIP logo

plugin-apscheduler's Introduction

nonebot

NoneBot Plugin APScheduler

✨ NoneBot APScheduler 定时任务插件 ✨

license pypi python

使用方式

加载插件后使用 require 获取 scheduler 对象(请注意插件加载顺序)

from nonebot import require

require("nonebot_plugin_apscheduler")

from nonebot_plugin_apscheduler import scheduler

@scheduler.scheduled_job("cron", hour="*/2", id="xxx", args=[1], kwargs={"arg2": 2})
async def run_every_2_hour(arg1, arg2):
    pass

scheduler.add_job(run_every_day_from_program_start, "interval", days=1, id="xxx")

配置项

apscheduler_autostart

是否自动启动 scheduler

apscheduler_log_level

int 类型日志等级

  • WARNING = 30 (默认)
  • INFO = 20
  • DEBUG = 10 (只有在开启 nonebot 的 debug 模式才会显示 debug 日志)

apscheduler_config

apscheduler 的相关配置。参考 配置 scheduler, 配置参数

配置需要包含 prefix: apscheduler.

默认配置:

{ "apscheduler.timezone": "Asia/Shanghai" }

plugin-apscheduler's People

Contributors

eya46 avatar pre-commit-ci[bot] avatar yanyongyu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

plugin-apscheduler's Issues

Bug: linux系统下nonebot2.0.0rc3以上启动时无法将apscheduler正确初始化

操作系统

Linux

Python 版本

3.8.2

NoneBot 版本

2.0.0rc4及以上

适配器

OneBot V11 2.2.1和2.2.3(尝试更新适配器版本,但问题依旧)

协议端

无需协议端,单独启动即可

描述问题

linux下使用import nonebot_plugin_apscheduler将定时器import后,nonebot2.0.0rc4及最新版本中没有看到关于定时器初始化成功的代码。
2 0 0
r3

PS:在windows下,2.0.0rc4和2.0.0Stable版本是可以正常初始化定时器的。

看起来2.0.0版本并没有输出“nonebot_plugin_apscheduler | Scheduler Started”这句话,也没有进入到nonebot_plugin_apscheduler_init_.py的_start_scheduler()函数里。
3
根据上面的截图和下面的日志,这个判断是有效的,但是get_driver().on_startup()和get_driver().on_shutdown()没有成功运行。

复现步骤

nonebot 2.0.0rc3 使用import nonebot_plugin_apscheduler初始化启动后 查看apscheduler初始化情况
nonebot 2.0.0 同上查看

期望的结果

2.0.0版本可以正确初始化定时器

截图或日志

rc3:
06-28 22:54:02 [SUCCESS] nonebot | NoneBot is initializing...
06-28 22:54:02 [INFO] nonebot | Current Env: prod
plugin_config.apscheduler_autoshart = True scheduler.running=False
06-28 22:54:02 [SUCCESS] nonebot | Succeeded to import "nonebot_plugin_apscheduler"
06-28 22:54:02 [INFO] haruka_bot | 检查 Chromium 更新
06-28 22:54:02 [INFO] haruka_bot | 检查 Playwright 依赖
06-28 22:54:03 [INFO] kmrbot_plugins | LiveRoomMonitorManager running_loop start.
06-28 22:54:03 [SUCCESS] kmrbot_plugins | kmrbot_plugins import success.
06-28 22:54:03 [SUCCESS] nonebot | Succeeded to import "haruka_bot"
06-28 22:54:03 [SUCCESS] nonebot | Running NoneBot...
06-28 22:54:03 [INFO] uvicorn | Started server process [2566]
06-28 22:54:03 [INFO] uvicorn | Waiting for application startup.
1
2
06-28 22:54:03 [INFO] nonebot_plugin_apscheduler | Scheduler Started
06-28 22:54:03 [INFO] haruka_bot | dy_sched
06-28 22:54:03 [INFO] uvicorn | Application startup complete.
06-28 22:54:03 [INFO] uvicorn | Uvicorn running on http://127.0.0.1:8080 (Press CTRL+C to quit)

2.0.0:
06-28 23:09:00 [SUCCESS] nonebot | NoneBot is initializing...
06-28 23:09:00 [INFO] nonebot | Current Env: prod
plugin_config.apscheduler_autoshart = True scheduler.running=False
06-28 23:09:00 [SUCCESS] nonebot | Succeeded to load plugin "nonebot_plugin_apscheduler"
06-28 23:09:00 [INFO] haruka_bot | 检查 Chromium 更新
06-28 23:09:00 [INFO] haruka_bot | 检查 Playwright 依赖
06-28 23:09:02 [INFO] kmrbot_plugins | LiveRoomMonitorManager running_loop start.
06-28 23:09:02 [SUCCESS] kmrbot_plugins | kmrbot_plugins import success.
06-28 23:09:02 [SUCCESS] nonebot | Succeeded to load plugin "haruka_bot"
06-28 23:09:02 [SUCCESS] nonebot | Running NoneBot...
06-28 23:09:02 [INFO] uvicorn | Started server process [3002]
06-28 23:09:02 [INFO] uvicorn | Waiting for application startup.
06-28 23:09:02 [INFO] uvicorn | Application startup complete.
06-28 23:09:02 [INFO] uvicorn | Uvicorn running on http://127.0.0.1:8080 (Press CTRL+C to quit)

apscheduler启动时候有几个warning

运行环境:
python 3.8.1
server ubuntu20.4

nonebot-adapter-onebot         2.0.0b1
nonebot-plugin-apscheduler    0.1.2
nonebot2                                  2.0.0b2

正常运行,warning信息

/usr/local/lib/python3.8/dist-packages/apscheduler/util.py:95: PytzUsageWarning: The zone attribute is specific to pytz's interface; please migrate to a new time zone provider. For more details on how to do so, see https://pytz-deprecation-shim.readthedocs.io/en/latest/migration.html
  if obj.zone == 'local':
/usr/local/lib/python3.8/dist-packages/apscheduler/triggers/cron/__init__.py:146: PytzUsageWarning: The normalize method is no longer necessary, as this time zone supports the fold attribute (PEP 495). For more details on migrating to a PEP 495-compliant implementation, see https://pytz-deprecation-shim.readthedocs.io/en/latest/migration.html
  return self.timezone.normalize(dateval + difference), fieldnum
/usr/local/lib/python3.8/dist-packages/apscheduler/triggers/cron/__init__.py:159: PytzUsageWarning: The localize method is no longer necessary, as this time zone supports the fold attribute (PEP 495). For more details on migrating to a PEP 495-compliant implementation, see https://pytz-deprecation-shim.readthedocs.io/en/latest/migration.html
  return self.timezone.localize(datetime(**values))

提问:如何以driver.on_bot_connect的方式启动定时任务

如果不是on_bot_connect方式是正常启动的。

现在我希望改到连接bot后启动定时任务

@driver.on_bot_connect
async def _()
    users = read_yaml(Path().joinpath("data/bilifan"))
    cron = users.get("CRON", None)
    if not cron:
        logger.error("定时格式不正确,不启用定时功能")
    try:
        fields = cron.split(" ")
        scheduler.add_job(auto_cup, "cron", hour=fields[0], minute=fields[1], id="auto_cup")
    except AttributeError:
        logger.error("定时格式不正确,不启用定时功能")

结果在启动的时候报错(之前还有另外一种报错,说该定时任务已经存在,没法复现暂时)
image

插件报错

Q}( GEDM68LKQC7 ZQY0P{9

windows10下,pycharm运行
插件最新版本

修改任务时间问题

想在插件中实现定时查询一个api里的时间,再使用查询到的最新时间进行定时提醒。
查了一下APScheduler的文档,想用scheduler.reschedule_job来实现
这样的话需要在最开始add_job时候加上一个参数id,但这样会报错,查了一下好像是add_job()里面func参数的缺失,似乎是没检测到后面的async def(?

image

我的大致代码如下

from nonebot_plugin_apscheduler import scheduler

time_notice2 = require("nonebot_plugin_apscheduler").scheduler
time_update1 = require("nonebot_plugin_apscheduler").scheduler

with open(filename) as f_obj:
     j = json.load(f_obj)
     cf_date = j['cf_time']

# 提前2小时提醒
@time_notice2.add_job("date", run_date=cf_date, id="notice2")  # 报错在这行
async def notice_cf2():
    ......
    logger.info(f"已发送提前2h提醒")

# 每隔5秒更新一次时间
@time_update1.scheduled_job('interval', seconds=5)
async def update_time():
     ......
     if ok == 1:
         with open(filename) as f_obj:
             j = json.load()
         scheduler.reschedule_job(job_id='notice2', trigger='date', run_date=j['cf_time'])

还是说有其他实现方法呢,求指导一下qwq

更新nb2后关于apscheduler的插件都报错

07-08 14:48:07 [ERROR] nonebot | Failed to import "nonebot_plugin_apscheduler"
Traceback (most recent call last):
  File "C:\Users\Administrator\Desktop\ChatGPT3.5\nonebot\No1\bot.py", line 14, in <module>
    nonebot.load_from_toml("pyproject.toml")
  File "C:\Users\Administrator\Desktop\ChatGPT3.5\nonebot\No1\.venv\lib\site-packages\nonebot\plugin\load.py", line 125,
 in load_from_toml
    return load_all_plugins(plugins, plugin_dirs)
  File "C:\Users\Administrator\Desktop\ChatGPT3.5\nonebot\No1\.venv\lib\site-packages\nonebot\plugin\load.py", line 62,
in load_all_plugins
    return manager.load_all_plugins()
  File "C:\Users\Administrator\Desktop\ChatGPT3.5\nonebot\No1\.venv\lib\site-packages\nonebot\plugin\manager.py", line 1
75, in load_all_plugins
    return set(
  File "C:\Users\Administrator\Desktop\ChatGPT3.5\nonebot\No1\.venv\lib\site-packages\nonebot\plugin\manager.py", line 1
76, in <genexpr>
    filter(None, (self.load_plugin(name) for name in self.available_plugins))
  File "C:\Users\Administrator\Desktop\ChatGPT3.5\nonebot\No1\.venv\lib\site-packages\nonebot\plugin\manager.py", line 1
41, in load_plugin
    module = importlib.import_module(name)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\importlib\__init__.py", line 126, in import_m
odule
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "C:\Users\Administrator\Desktop\ChatGPT3.5\nonebot\No1\.venv\lib\site-packages\nonebot\plugin\manager.py", line 2
40, in exec_module
    super().exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "C:\Users\Administrator\Desktop\ChatGPT3.5\nonebot\No1\.venv\lib\site-packages\nonebot_plugin_lolmatch\__init__.p
y", line 38, in <module>
    require("nonebot_plugin_apscheduler")
  File "C:\Users\Administrator\Desktop\ChatGPT3.5\nonebot\No1\.venv\lib\site-packages\nonebot\plugin\load.py", line 166,
 in require
    plugin = manager.load_plugin(name)
> File "C:\Users\Administrator\Desktop\ChatGPT3.5\nonebot\No1\.venv\lib\site-packages\nonebot\plugin\manager.py", line 1
41, in load_plugin
    module = importlib.import_module(name)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\importlib\__init__.py", line 126, in import_m
odule
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "C:\Users\Administrator\Desktop\ChatGPT3.5\nonebot\No1\.venv\lib\site-packages\nonebot\plugin\manager.py", line 2
40, in exec_module
    super().exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "C:\Users\Administrator\Desktop\ChatGPT3.5\nonebot\No1\.venv\lib\site-packages\nonebot_plugin_apscheduler\__init_
_.py", line 10, in <module>
    __plugin_meta__ = PluginMetadata(
TypeError: PluginMetadata.__init__() got an unexpected keyword argument 'type'

apscheduler的报错 其他似乎是一样的问题 是不适配nonebot2最新版本吗?

插件无法加载

如题 操作系统 Centos8.0;Python 3.10.5 ;NoneBot2 v2.0.0-beta.4
报错如下

07-11 18:14:55 [ERROR] nonebot | Failed to import "plugin-apscheduler"
Traceback (most recent call last):
  File "/usr/local/bin/nb", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.10/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/nb_cli/commands/main.py", line 30, in run
    run_bot(file, app)
  File "/usr/local/lib/python3.10/site-packages/nb_cli/handlers/deploy.py", line 20, in run_bot
    module = importlib.import_module(module_name)
  File "/usr/local/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/home/xxx/awabot/./bot.py", line 27, in <module>
    nonebot.load_from_toml("pyproject.toml")
  File "/usr/local/lib/python3.10/site-packages/nonebot/plugin/load.py", line 119, in load_from_toml
    return load_all_plugins(plugins, plugin_dirs)
  File "/usr/local/lib/python3.10/site-packages/nonebot/plugin/load.py", line 53, in load_all_plugins
    return manager.load_all_plugins()
  File "/usr/local/lib/python3.10/site-packages/nonebot/plugin/manager.py", line 172, in load_all_plugins
    return set(
  File "/usr/local/lib/python3.10/site-packages/nonebot/plugin/manager.py", line 173, in <genexpr>
    filter(None, (self.load_plugin(name) for name in self.available_plugins))
> File "/usr/local/lib/python3.10/site-packages/nonebot/plugin/manager.py", line 144, in load_plugin
    module = importlib.import_module(name)
  File "/usr/local/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1004, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'plugin-apscheduler'

与nonebot 2.0.0a13有兼容性问题

引入这样一个简单插件:

from nonebot import export, require

scheduler = require('nonebot_plugin_apscheduler').scheduler

@scheduler.scheduled_job("interval", seconds=10)
async def ttt():
    print(123)

会引发下面报错:

04-26 13:49:12 [INFO] nonebot | NoneBot is initializing...
04-26 13:49:12 [INFO] nonebot | Current Env: prod
04-26 13:49:12 [ERROR] nonebot | Failed to import "nonebot_plugin_apscheduler"
Traceback (most recent call last):
  File "/home/*******/**************/test_nonebot/bot.py", line 7, in <module>
    nonebot.load_plugin('nonebot_plugin_apscheduler')
  File "/home/*******/.cache/pypoetry/virtualenvs/test-nonebot-NEyztDrX-py3.9/lib/python3.9/site-packages/nonebot/plugin/__init__.py", line 959, in load_plugin
    return context.run(_load_plugin, manager, module_path)
> File "/home/*******/.cache/pypoetry/virtualenvs/test-nonebot-NEyztDrX-py3.9/lib/python3.9/site-packages/nonebot/plugin/__init__.py", line 928, in _load_plugin
    module = manager.load_plugin(plugin_name)
  File "/home/*******/.cache/pypoetry/virtualenvs/test-nonebot-NEyztDrX-py3.9/lib/python3.9/site-packages/nonebot/plugin/manager.py", line 148, in load_plugin
    return importlib.import_module(name)
  File "/usr/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 790, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/home/*******/.cache/pypoetry/virtualenvs/test-nonebot-NEyztDrX-py3.9/lib/python3.9/site-packages/nonebot_plugin_apscheduler/__init__.py", line 14, in <module>
    export().scheduler = scheduler
  File "/home/*******/.cache/pypoetry/virtualenvs/test-nonebot-NEyztDrX-py3.9/lib/python3.9/site-packages/nonebot/plugin/export.py", line 60, in export
    return _export.get()
LookupError: <ContextVar name='_export' at 0x7f0fbcb88540>
04-26 13:49:12 [INFO] nonebot | Succeeded to import "nonebot_plugin_apscheduler"
04-26 13:49:12 [ERROR] nonebot | Failed to import "a"
Traceback (most recent call last):
  File "/home/*******/**************/test_nonebot/bot.py", line 8, in <module>
    nonebot.load_plugins("plugins")
  File "/home/*******/.cache/pypoetry/virtualenvs/test-nonebot-NEyztDrX-py3.9/lib/python3.9/site-packages/nonebot/plugin/__init__.py", line 980, in load_plugins
    result = context.run(_load_plugin, manager, plugin_name)
> File "/home/*******/.cache/pypoetry/virtualenvs/test-nonebot-NEyztDrX-py3.9/lib/python3.9/site-packages/nonebot/plugin/__init__.py", line 928, in _load_plugin
    module = manager.load_plugin(plugin_name)
  File "/home/*******/.cache/pypoetry/virtualenvs/test-nonebot-NEyztDrX-py3.9/lib/python3.9/site-packages/nonebot/plugin/manager.py", line 154, in load_plugin
    return importlib.import_module(f"{self.namespace}.{name}")
  File "/usr/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "/home/*******/.cache/pypoetry/virtualenvs/test-nonebot-NEyztDrX-py3.9/lib/python3.9/site-packages/nonebot/plugin/manager.py", line 220, in exec_module
    super().exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 790, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "plugins/a.py", line 5, in <module>
    @scheduler.scheduled_job("interval", seconds=10)
  File "/home/*******/.cache/pypoetry/virtualenvs/test-nonebot-NEyztDrX-py3.9/lib/python3.9/site-packages/nonebot/plugin/export.py", line 33, in __call__
    self[func.__name__] = func
AttributeError: 'str' object has no attribute '__name__'
04-26 13:49:12 [INFO] nonebot | Running NoneBot...
04-26 13:49:12 [INFO] uvicorn | Started server process [600944]
04-26 13:49:12 [INFO] uvicorn | Waiting for application startup.
04-26 13:49:12 [INFO] nonebot_plugin_apscheduler | Scheduler Started
04-26 13:49:12 [INFO] uvicorn | Application startup complete.
04-26 13:49:12 [INFO] uvicorn | Uvicorn running on http://127.0.0.1:8080 (Press CTRL+C to quit)
^C04-26 13:49:15 [INFO] uvicorn | Shutting down
04-26 13:49:15 [INFO] uvicorn | Waiting for application shutdown.
04-26 13:49:15 [INFO] uvicorn | Application shutdown complete.
04-26 13:49:15 [INFO] uvicorn | Finished server process [600944]

运行环境:

nonebot-adapter-cqhttp     2.0.0a13
nonebot-plugin-apscheduler 0.1.2
nonebot2                   2.0.0a13

pytbon 3.9.3

在启动插件时出现'Can not find timezone '的问题【已经解决】

问题描述

今天我尝试安装这个插件,方法使用的是文档里的方法,人品大爆发,在安装之后重启nonebot发现该插件启动失败。

首先'Can not find timezone '从这来的

raise pytz.UnknownTimeZoneError('Can not find timezone ' + tzkeyname)

说明tzkeyname是空的

报错如下

02-18 03:33:56 [ERROR] nonebot | Failed to import "nonebot_plugin_apscheduler"
Traceback (most recent call last):
  File "d:\ngbot\bot.py", line 9, in <module>
    nonebot.load_plugin("nonebot_plugin_apscheduler")
  File "C:\python\lib\site-packages\nonebot\plugin.py", line 991, in load_plugin
    return context.run(_load_plugin, module_path)
> File "C:\python\lib\site-packages\nonebot\plugin.py", line 975, in _load_plugin
    module = importlib.import_module(module_path)
  File "C:\python\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 790, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "C:\python\lib\site-packages\nonebot_plugin_apscheduler\__init__.py", line 13, in <module>
    scheduler = AsyncIOScheduler()
  File "C:\python\lib\site-packages\apscheduler\schedulers\base.py", line 87, in __init__  
    self.configure(gconfig, **options)
  File "C:\python\lib\site-packages\apscheduler\schedulers\base.py", line 131, in configure
    self._configure(config)
  File "C:\python\lib\site-packages\apscheduler\schedulers\asyncio.py", line 54, in _configure
    super(AsyncIOScheduler, self)._configure(config)
  File "C:\python\lib\site-packages\apscheduler\schedulers\base.py", line 702, in _configure  
    self.timezone = astimezone(config.pop('timezone', None)) or get_localzone()
  File "C:\python\lib\site-packages\tzlocal\win32.py", line 110, in get_localzone
    _cache_tz = pytz.timezone(get_localzone_name())
  File "C:\python\lib\site-packages\tzlocal\win32.py", line 101, in get_localzone_name
    raise pytz.UnknownTimeZoneError('Can not find timezone ' + tzkeyname)
pytz.exceptions.UnknownTimeZoneError: 'Can not find timezone '

排除过程

  • 前往 C:\python\lib\site-packages\tzlocal\win32.py

不同安装目录可能有差异

  • 定位到 get_localzone_name()函数下的keyvalues变量
  • print输出发现
def get_localzone_name():
    ......

    keyvalues = valuestodict(localtz)
    print(keyvalues)
    ......

if __name__ == "__main__":
    get_localzone_name()

{
        "Bias": 4294966816, 
        "DaylightBias": 4294967236, 
        "DaylightName": "**夏令时", 
        "DaylightStart": b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 
        "DynamicDaylightTimeDisabled": 0, 
        "StandardBias": 0, 
        "StandardName": "**标准时间", 
        "StandardStart": b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 

        "TimeZoneKeyName": "", 

        "ActiveTimeBias": 4294966816
        }

发现TimeZoneKeyName字段为空
从而导致了后面错误发生

  • 我重构了一个同名的变量覆盖
def get_localzone_name():
    ......

    keyvalues = valuestodict(localtz)
    keyvalues = {
        "Bias": 4294966816, 
        "DaylightBias": 4294967236, 
        "DaylightName": "**夏令时", 
        "DaylightStart": b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 
        "DynamicDaylightTimeDisabled": 0, 
        "StandardBias": 0, 
        "StandardName": "**标准时间", 
        "StandardStart": b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 

        "TimeZoneKeyName": "China Standard Time", 

        "ActiveTimeBias": 4294966816
        }
    ......

if __name__ == "__main__":
    get_localzone_name()

通过

02-18 03:48:00 [INFO] nonebot | Succeeded to import "nonebot_plugin_apscheduler"

题外话

我感觉这是windows的锅

添加配置后无法加载插件

from pydantic import Field, BaseSettings
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
import datetime
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor

from apscheduler.schedulers.background import BackgroundScheduler

jobstores = {
    'default': SQLAlchemyJobStore(url='sqlite:///sql.sqlite')
}
executors = {
    'default': ThreadPoolExecutor(20),
    'processpool': ProcessPoolExecutor(20)
}
job_defaults = {
    'coalesce': True,
    'max_instances': 10
}


class Config(BaseSettings):
    apscheduler_autostart: bool = True
    apscheduler_log_level: int = 30
    apscheduler_config: dict = Field(
        default_factory=lambda: {"apscheduler.timezone": "Asia/Shanghai",
                                 "apscheduler.next_run_time": f"{datetime.datetime.now().astimezone()}",
                                 "apscheduler.jobstores": jobstores,
                                 "apscheduler.executors": executors,
                                 "apscheduler.job_defaults": job_defaults}
    )

    class Config:
        extra = "ignore"

如上,我添加了next_run_time,jobstores,executors,job_defaults,后就不能加载插件了
报错信息如下:

07-09 21:59:44 [ERROR] nonebot | Failed to import "nonebot_plugin_apscheduler"
Traceback (most recent call last):
  File "D:\桌面\usdt机器人\USDT\bot.py", line 15, in <module>
    nonebot.load_plugins("plugins/usdt")  # 本地插件
  File "D:\桌面\usdt机器人\USDT\.venv\lib\site-packages\nonebot\plugin\load.py", line 48, in load_plugins
    return manager.load_all_plugins()
  File "D:\桌面\usdt机器人\USDT\.venv\lib\site-packages\nonebot\plugin\manager.py", line 175, in load_all_plugins
    return set(
  File "D:\桌面\usdt机器人\USDT\.venv\lib\site-packages\nonebot\plugin\manager.py", line 176, in <genexpr>
    filter(None, (self.load_plugin(name) for name in self.available_plugins))
  File "D:\桌面\usdt机器人\USDT\.venv\lib\site-packages\nonebot\plugin\manager.py", line 145, in load_plugin
    module = importlib.import_module(
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 992, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "D:\桌面\usdt机器人\USDT\plugins\usdt\__init__.py", line 33, in <module>
    require("nonebot_plugin_apscheduler")
  File "D:\桌面\usdt机器人\USDT\.venv\lib\site-packages\nonebot\plugin\load.py", line 174, in require
    plugin = load_plugin(name)
  File "D:\桌面\usdt机器人\USDT\.venv\lib\site-packages\nonebot\plugin\load.py", line 37, in load_plugin
    return manager.load_plugin(module_path)
> File "D:\桌面\usdt机器人\USDT\.venv\lib\site-packages\nonebot\plugin\manager.py", line 154, in load_plugin
    raise RuntimeError(
RuntimeError: Module nonebot_plugin_apscheduler is not loaded as a plugin! Make sure not to import it before loading.

定时任务无法使用

当执行bot.py时会出现下列日志,这证明定时任务已经打开

08-13 20:57:45 [INFO] apscheduler | Scheduler started
08-13 20:57:50 [INFO] apscheduler | Added job "cccc" to job store "default"

下面为任务代码

async def cccc():
	print('test')
	nonebot.logger.warning('test')
scheduler.add_job(cccc, "cron", hour='21', id="cccc")

但是当到了21点的时候我观察没有任何日志信息,甚至没有类似提示任务被miss的日志,当然print()和nonebot.logger.warning()也无法执行,不知道是何种原因
目前版本:
Windows Server 2019
python 3.10
nonebot 2.0.1
nonebot_plugin_apscheduler 0.3.0
fastapi 0.101.0

很奇怪的bug,在服务器上运行时随机不执行定时任务,但是在本地主机上执行不会出现这种问题

本地环境:nonebot2 2.0.0rc2
nonebot-adapter-cqhttp 2.0.0b1
nonebot-plugin-gocqhttp 0.6.3
nonebot-plugin-apscheduler 0.2.0
服务器环境:nonebot2 2.0.0rc2
nonebot-adapter-cqhttp 2.0.0b1
nonebot-plugin-gocqhttp 0.6.9
nonebot-plugin-apscheduler 0.2.0
写了一个简单的debug程序,分别在服务器和本地执行
QQ图片20230410135737
本地执行效果
%IP1T3ZCO 6 AQ6JJJRAX)W
本地控制台:
image
服务器没有发送,控制台指令log是这样的:
image

加载错误

首先是nonebot_plugin_myb_exchange插件依赖于您的插件
image
但是我安装完成后,你的插件就报错
image
不知道怎么回事,加上我不会英语(日语生),所以来问问你
我使用的是基于云崽py插件的nonebot

'str' object has no attribute '__name__'

@scheduler.scheduled_job("interval", seconds=1)
File "/usr/local/lib/python3.10/site-packages/nonebot/plugin/export.py", line 38, in __call__
  self[func.__name__] = func
AttributeError: 'str' object has no attribute '__name__'

nonebot2 = "^2.0.0rc2"
nonebot-plugin-apscheduler = "^0.2.0"

Failed to import "nonebot_plugin_apscheduler"

通过复制nonebot商店的代码直接安装插件plugin_apscheduler,在.env里配置自启动,然后启动nonebot时报错。

ImportError: cannot import name 'export' from 'nonebot' (D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\lib\site-packages\nonebot\__init__.py)

  File "C:\Users\周亮\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\周亮\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\Scripts\nb.exe\__main__.py", line 7, in <module>
    sys.exit(main())
  File "D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\lib\site-packages\click\core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\lib\site-packages\click\core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\lib\site-packages\click\core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\lib\site-packages\click\core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\lib\site-packages\click\core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\lib\site-packages\nb_cli\commands\main.py", line 30, in run
    run_bot(file, app)
  File "D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\lib\site-packages\nb_cli\handlers\deploy.py", line 20, in run_bot
    module = importlib.import_module(module_name)
  File "C:\Users\周亮\AppData\Local\Programs\Python\Python310\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "D:\projrct\nonebot2-oneclick-win-main\.\bot.py", line 82, in <module>
    nonebot.load_from_toml("pyproject.toml")
  File "D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\lib\site-packages\nonebot\plugin\load.py", line 122, in load_from_toml
    return load_all_plugins(plugins, plugin_dirs)
  File "D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\lib\site-packages\nonebot\plugin\load.py", line 59, in load_all_plugins
    return manager.load_all_plugins()
  File "D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\lib\site-packages\nonebot\plugin\manager.py", line 168, in load_all_plugins
    return set(
  File "D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\lib\site-packages\nonebot\plugin\manager.py", line 169, in <genexpr>
    filter(None, (self.load_plugin(name) for name in self.available_plugins))
  File "D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\lib\site-packages\nonebot\plugin\manager.py", line 145, in load_plugin
    module = importlib.import_module(
  File "C:\Users\周亮\AppData\Local\Programs\Python\Python310\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\lib\site-packages\nonebot\plugin\manager.py", line 233, in exec_module
    super().exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "D:\projrct\nonebot2-oneclick-win-main\.\src\plugins\dsrw.py", line 9, in <module>
    dsrw= require("nonebot_plugin_apscheduler").scheduler
  File "D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\lib\site-packages\nonebot\plugin\load.py", line 163, in require
    plugin = manager.load_plugin(name)
> File "D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\lib\site-packages\nonebot\plugin\manager.py", line 141, in load_plugin
    module = importlib.import_module(name)
  File "C:\Users\周亮\AppData\Local\Programs\Python\Python310\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\lib\site-packages\nonebot\plugin\manager.py", line 233, in exec_module
    super().exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\lib\site-packages\nonebot_plugin_apscheduler\__init__.py", line 3, in <module>
    from nonebot import export, get_driver
ImportError: cannot import name 'export' from 'nonebot' (D:\projrct\nonebot2-oneclick-win-main\venv\virtualenvs\nb2-oneclick-d05kVXNY-py3.10\lib\site-packages\nonebot\__init__.py)

python版本3.10
nonebot版本:2.0.0-re1

env配置
APSCHEDULER_AUTOSTART=true
APSCHEDULER_CONFIG={"apscheduler.timezone": "Asia/Shanghai"}

除了配置env之外未编辑任何与apscheduler相关文件

【错误回报】疑似兼容性错误

在使用
nonepkg/plugin-mcstatus#4
这个MC服务器查询插件的时候,插件运行时,一直在报这个INFO,导致有点刷屏
插件作者说可能是本插件的问题

04-22 16:17:30 [INFO] nonebot | Event will be handled by <Matcher from nonebot_plugin_repeater, type=message, priority=10, temp=False>
04-22 16:17:30 [INFO] nonebot | Matcher <Matcher from nonebot_plugin_repeater, type=message, priority=10, temp=False> running complete
C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\apscheduler\util.py:436: PytzUsageWarning: The localize method is no longer necessary, as this time zone supports the fold attribute (PEP 495). For more details on migrating to a PEP 495-compliant implementation, see https://pytz-deprecation-shim.readthedocs.io/en/latest/migration.html
return tzinfo.localize(dt)
C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\mcstatus\utils.py:104: DeprecationWarning: 'MinecraftServer' is deprecated and is expected to be removed on 2022-08, use 'JavaServer' instead.
warnings.warn(warn_message, category=DeprecationWarning)
C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\mcstatus\utils.py:104: DeprecationWarning: 'MinecraftServer' is deprecated and is expected to be removed on 2022-08, use 'JavaServer' instead.
warnings.warn(warn_message, category=DeprecationWarning)
C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\httpx_content.py:203: DeprecationWarning: Use 'content=<...>' to upload raw bytes/text content.
warnings.warn(message, DeprecationWarning)

定时任务没有执行

ComWeChatBotClient搭建的微信机器人,反向WebSocket,起了一个Nonebot,然后用plugin-apscheduler创建了一个每天定时推送天气预报的任务,启动的显示插件加载成功了,但是到时间后没有任何反应。

import nonebot
import requests
from nonebot import require
from nonebot.adapters.onebot.v12 import Adapter

# 初始化 NoneBot
nonebot.init()
app = nonebot.get_asgi()

# 注册适配器
driver = nonebot.get_driver()
driver.register_adapter(Adapter)

nonebot.load_plugins("plugins/chatgpt")  # ChatGPT

require("nonebot_plugin_apscheduler")

from nonebot_plugin_apscheduler import scheduler


def get_daily_weather_msg():
    params = {"key": "288a5858cf8e924665f6eafb18e88bcb", "city": "110108"}
    res = requests.get(url="http://api.tianapi.com/tianqi/index", params=params)
    data = res.json()
    print(f"data: {data}")
    date = data["newslist"][0]["date"]
    week = data["newslist"][0]["week"]
    area = data["newslist"][0]["area"]
    weather = data["newslist"][0]["weather"]
    lowest = data["newslist"][0]["lowest"]
    highest = data["newslist"][0]["highest"]
    wind = data["newslist"][0]["wind"]
    windsc = data["newslist"][0]["windsc"]
    tips = data["newslist"][0]["tips"]
    msg = f"今天是{date}{week},小麦为您播报{area}的天气。\n\n"
    msg += f"今天{weather},最低温度:{lowest},最高温度:{highest},风向:{wind}{windsc}\n\n"
    msg += f"小麦提醒你,{tips}"
    return msg


# 每日天气
@scheduler.scheduled_job("cron", hour="17", minute="21", id="daily_weather")
async def daily_weather():
    nonebot.logger.info("每日天气推送")
    bot, = nonebot.get_bots().values()
    msg = get_daily_weather_msg()

    vip_user_list = ["wxid_u7s0skwtellf22"]
    print(f"vip_user_list: {vip_user_list}")
    for user_id in vip_user_list:
        await bot.send_private_msg(user_id=user_id, message=msg)


scheduler.add_job(daily_weather, "interval", days=1, id="daily_weather")

if __name__ == "__main__":
    nonebot.logger.warning("小麦微信版启动")
    nonebot.run()

按理来说应该在下午五点21分的时候推送消息,但是启动后到时间没有任何反应。

image

关于定时器运行时间长后出现的问题,想请教一下

描述

我的 ELF_RSS 插件创建 的 IntervalTrigger 间隔触发任务,在运行一段时间后(2~3左右),会出现某个任务一直报如下警告,导致该任务不能正常进行,像卡住一样。

[WARNING] apscheduler | Execution of job "check_update (trigger: interval[0:05:00], next run at: 2021-03-13 18:58:47 CST)" skipped: maximum number of running instances reached (1)

image

我目前的解决措施是使用一个装饰器来设置超时时间,主动结束任务。
相关代码:https://github.com/Quan666/ELF_RSS/blame/6d95b84010d84a8fd889e483a0579d98db25ffe8/src/plugins/ELF_RSS2/RSS/util.py#L1

这在开始运行一段时间内是正常工作的
image
但时间久了会出现上面同样的警告,然后导致不能按预期运行。

我的定时器创建相关代码:https://github.com/Quan666/ELF_RSS/blob/2.0/src/plugins/ELF_RSS2/RSS/my_trigger.py

环境:

Linux Centos7.x
Docker version 1.13.1, build 0be3e21/1.13.1
Python 3.8
APScheduler~=3.7.0
定时器任务数量:20+

复现:

未能复现,但在运行一段时间后会出现

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.