如果将mongodb用作作业存储区,则在启动调度程序时,Python软件包APSscheduler会引发错误

问题描述 投票:0回答:1

我正在尝试使用MongoDB作为作业存储的APScheduler运行一些代码。我已经下载了pymongo并进行了测试,因此可以正常工作。当实例化调度程序时,APScheduler将工作,但是当我运行scheduler.start()时,它将引发以下错误:

Traceback (most recent call last):
  File "aps_ro.py", line 56, in <module>
    scheduler.start()
  File "/usr/lib/python3.8/site-packages/apscheduler/schedulers/background.py", line 33, in start
    BaseScheduler.start(self, *args, **kwargs)
  File "/usr/lib/python3.8/site-packages/apscheduler/schedulers/base.py", line 158, in start
    store.start(self, alias)
  File "/usr/lib/python3.8/site-packages/apscheduler/jobstores/mongodb.py", line 57, in start
    self.collection.ensure_index('next_run_time', sparse=True)
  File "/usr/lib/python3.8/site-packages/pymongo/collection.py", line 2028, in ensure_index
    self.__create_index(keys, kwargs, session=None)
  File "/usr/lib/python3.8/site-packages/pymongo/collection.py", line 1881, in __create_index
    with self._socket_for_writes(session) as sock_info:
  File "/usr/lib/python3.8/site-packages/pymongo/collection.py", line 195, in _socket_for_writes
    return self.__database.client._socket_for_writes(session)
  File "/usr/lib/python3.8/site-packages/pymongo/mongo_client.py", line 1266, in _socket_for_writes
    server = self._select_server(writable_server_selector, session)
  File "/usr/lib/python3.8/site-packages/pymongo/mongo_client.py", line 1253, in _select_server
    server = topology.select_server(server_selector)
  File "/usr/lib/python3.8/site-packages/pymongo/topology.py", line 233, in select_server
    return random.choice(self.select_servers(selector,
  File "/usr/lib/python3.8/site-packages/pymongo/topology.py", line 192, in select_servers
    server_descriptions = self._select_servers_loop(
  File "/usr/lib/python3.8/site-packages/pymongo/topology.py", line 208, in _select_servers_loop
    raise ServerSelectionTimeoutError(
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused

我的实际代码示例如下:

jobstores = {
    'mongo': {'type': 'mongodb'},
    'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')
}
executors = {...}
job_defaults = {...}

scheduler = BackgroundScheduler()
scheduler.configure(jobstores=jobstores, executors=executors, job_defaults=job_defaults, timezone=utc)

@scheduler.scheduled_job(trigger='cron', day_of_week=4, hour=22, minute=21, second=0)
def tester():
    print("hello")

scheduler.start()
python scheduled-tasks scheduler job-scheduling apscheduler
1个回答
0
投票

默认情况下,mongodb python驱动程序将连接到主机localhost和端口27017上的数据库。

所以您将需要:

  • 确保mongodb服务器与python代码在同一台计算机上运行并且在默认端口上运行(您可以通过在您喜欢的shell上键入mongo并检查是否显示>提示符来轻松测试该端口)错误)。
  • 如果mongodb在不同的服务器或不同的端口上运行,请提供连接字符串或连接参数。
© www.soinside.com 2019 - 2024. All rights reserved.