PyMongo 在大量查询后引发 [errno 49] 无法分配请求的地址

2024-04-22

我有一个MongoDB收集超过 1,000,000 份文档。 我正在执行初始.find({ my_query })返回这些文档的子集(约 25,000 个文档),然后我将其放入list object.

然后,我循环遍历每个对象,解析列表中返回的文档中的一些值,并通过代码使用这些解析的值执行附加查询:

def _perform_queries(query):
    conn = pymongo.MongoClient('mongodb://localhost:27017')
    try:
        coll = conn.databases['race_results']
        races = coll.find(query).sort("date", -1)
    except BaseException, err:
        print('An error occured in runner query: %s\n' % err)
    finally:
        conn.close()
        return races

在这种情况下,我的query字典是:

{"$and": [{"opponents":
    {"$elemMatch": {"$and": [
        {"runner.name": name},
        {"runner.jockey": jockey}
    ]}}},
    {"summary.dist": "1"}
]}

这是我的问题。我已经创建了一个索引opponents.runner.name and opponents.runner.jockey。这使得查询变得非常非常快。然而,在连续大约 10,000 次查询之后,pymongo正在引发异常:

pymongo.errors.AutoReconnect: [Errno 49] Can't assign requested address

当我删除索引时,我没有看到此错误。但需要大约0.5 seconds每个查询,这在我的情况下不可用。

有谁知道为什么[Errno 49] can't assign requested address可能会发生吗?我见过一些其他相关问题can't assign requested address但不涉及pymongo这些答案不会带我到任何地方。

UPDATE:

按照下面 Serge 的建议,这里是输出ulimit -a:

core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 2560
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 709
virtual memory          (kbytes, -v) unlimited

我的 MongoDB 在 OS X Yosemite 上运行。


这是因为您错误地使用了 PyMongo。您正在为每个查询创建一个新的 MongoClient,这需要您为每个新查询打开一个新套接字。这会破坏 PyMongo 的连接池,除了速度极慢之外,还意味着您打开和关闭套接字的速度比 TCP 堆栈能够跟上的速度要快:您将太多套接字置于 TIME_WAIT 状态,因此最终会耗尽端口。

幸运的是,修复方法很简单。创建一个 MongoClient 并在整个过程中使用它:

conn = pymongo.MongoClient('mongodb://localhost:27017')
coll = conn.databases['race_results']

def _perform_queries(query):
    return coll.find(query).sort("date", -1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyMongo 在大量查询后引发 [errno 49] 无法分配请求的地址 的相关文章

  • 当你不需要Python中的索引时,如何创建For循环? [复制]

    这个问题在这里已经有答案了 如果我需要一个forPython 中的循环 for i in range 1 42 print spam 但不要使用i对于任何事情 pylint 都会抱怨未使用的变量 我应该如何处理这个问题 我知道你可以这样做
  • jinja2.exceptions.TemplateNotFound:index.html

    我尝试使用 Flask 打开 index html run py from app import app app run debug True init py from flask import Flask app Flask name f
  • 生成非连续组合

    我正在尝试创建一个生成器 支持执行 next 的迭代器 可能在 python 中使用yield 它给出来自 1 2 n n 和 r 是参数 的 r 元素的所有组合 这样在选出的r个元素 没有两个是连续的 例如 对于 r 2 且 n 4 生成
  • Python,将CSV文件转换为SQL表

    我有一个没有标题的 CSV 文件 并尝试从文件中的某些列创建 SQL 表 我尝试了这里给出的解决方案 使用 Python 将 CSV 文件导入 sqlite3 数据库表 https stackoverflow com questions 2
  • 这是在 python 中美白图像的正确方法吗?

    我在尝试着zero center and whiten CIFAR10数据集 但我得到的结果看起来像随机噪声 Cifar10数据集包含60 000尺寸的彩色图像32x32 训练集包含50 000和测试集包含10 000分别是图像 以下代码片
  • Pymacs 助手在 30 秒后未启动

    我见过其他关于此的问题 但没有一个得到真正的回答 而且没有一个是我的问题 我有一个新系统 emacs 23 1 Centos 6 2 我认为 我下载了最新的 pymacs 并安装了它 但是 我得到 error Pymacs helper d
  • Django 抛出此错误:SMTPException:服务器不支持 STARTTLS 扩展

    由于 gmail 中发送邮件的限制 我在我的一台服务器上安装了 exim4 设置如下 dc eximconfig configtype internet dc other hostnames mydomain com localhost l
  • UserDict 类的优点?

    使用有什么好处UserDict class 我的意思是 我真正得到的不是 class MyClass object def init self self a 0 self b 0 m MyClass m a 5 m b 7 我将写下以下内容
  • Sails.js 升级到 v1 反向区分大小写查询

    升级到 sails v1 后 控制器中的所有请求都变得区分大小写 尽管这是预料之中的 但在这里评论道 https sailsjs com documentation concepts models and orm models case s
  • Pandas 多索引数据框删除行

    我的多索引 DF 如下 tuples list zip a a b b c d c d index pd MultiIndex from tuples tuples names i1 i2 df pd DataFrame 5 6 7 8 i
  • Requests-html 导致 OSError: [Errno 8] 调用 html.render() 时执行格式错误

    我正在使用 requests html 并尝试渲染功能 但收效甚微 当我使用 python3 8 运行这个脚本时 usr bin python3 from requests html import HTML file scrape temp
  • 如何找到运行代码的 conda 环境的名称?

    我正在寻找一种好方法来从正在运行的代码或交互式 python 实例中找出我所在的 conda 环境的名称 用例是我通过 miniconda 安装运行带有 Python 2 和 Python 3 内核的 Jupyter 笔记本 默认环境是Py
  • 如何让 list_blobs 表现得像 gsutil

    我只想获得 GCS 上假文件夹结构的第一级 如果我运行例如 gsutil ls gs gcp public data sentinel 2 tiles 我得到一个这样的列表 gs gcp public data sentinel 2 til
  • 如何使用 python / pywinusb 将 hid 数据发送到设备?

    我正在尝试使用 pywinusb 将输出报告发送到 pic18f4550 该设备可以接收数据 我已经使用 C 应用程序对其进行了测试 效果很好 另外 我可以使用 pywinusb 从设备读取数据 但我在尝试发送数据时遇到问题 这是我正在运行
  • 带日志图的 Type 1 字体

    我正在尝试使用 Matplotlib 图表作为相机就绪的一部分 提交 出版社要求使用Type 1字体 仅有的 我发现 PDF 后端很乐意输出 Type 1 字体 具有线性 Y 轴的简单图形 但输出 Type 3 字体 对数 Y 轴 使用对数
  • hashlib 和 urandom 哪个更随机?

    我正在和一个朋友一起开发一个项目 我们需要生成随机哈希 在我们有时间讨论之前 我们都提出了不同的方法 并且因为他们使用不同的模块 我想问你们大家什么会更好 如果有这样的事情的话 hashlib sha1 str random random
  • 将 2D 数组中的每一列与另一个 2D 数组中的每一列相乘

    我有两个 Numpy 数组x有形状 m i and y有形状 m j 所以行数是相同的 我想将每一列相乘x每一列y逐元素 使结果具有形状 m i j Example import numpy as np np random seed 1 x
  • 如何使用 Google Drive API 通过服务帐户访问域中的共享文件?

    我一直在尝试从 Python 3 7 脚本访问有关 Google Shared Drive 文件的一些简单信息 上次修改共享云端硬盘上的 Google 表格文件的时间 我创建了一个服务帐户在 GCP Drive API 菜单中 它可以通过
  • 从tensorflow 2.0 beta中的tf.data.Dataset检索下一个元素

    在tensorflow 2 0 beta之前 要从tf data Dataset中检索第一个元素 我们可以使用迭代器 如下所示 usr bin python import tensorflow as tf train dataset tf
  • 使用按钮从 Django 项目根下载文件

    So this is the webpage I m creating atm with Django 1 8 希望用户能够将数据导出为 csv 当用户 在框中写下 Reddit 子版块名称 按下 获取数据 按钮 会发生什么 它创建了一个

随机推荐