如何在 Clojure 中按部分生成惰性序列?

2024-02-29

我有一个数据库服务器,我从中获取数据。有时数据有数百万行甚至更多,所以我使用惰性下载。我使用 clojure.jdbc 库中的服务器端游标https://funcool.github.io/clojure.jdbc/latest/#cursor-queries https://funcool.github.io/clojure.jdbc/latest/#cursor-queries延迟获取数据。

现在我有一个问题。我需要从惰性序列中生成初始 500 个元素,然后程序必须等待 10 分钟才能收到向程序报告生成下一个 500 个元素的信号,依此类推,直到我从服务器收到所有数据。但如果 10 分钟内没有收到报告,程序必须关闭连接。

我写了样本:

(def lazyseq_maps (atom {:seq_1 {:next_500 false :data nil} :seq_2 {:next_500 false :data nil}})) ; here is a collection of all unfinished lazy sequences waiting for signal to continue produce elements

(jdbc/atomic conn
 (with-open [cursor (jdbc/fetch-lazy conn sql]
   (let [lazyseq (jdbc/cursor->lazyseq cursor)]
     (swap! lazyseq_maps assoc seq_id {:next_500 true :data nil})
     (loop [lazyseq_rest lazyseq
            count 1]
            (if (:next_500 (seq_id @lazyseq_maps))
              (do
                (swap! lazyseq_maps update-in [seq_id :data] conj (first lazyseq_rest))
                (when (= 0 (mod count 500))
                  (swap! lazyseq_maps assoc-in [seq_id :next_500] false))
                (recur (rest lazyseq) (inc count)))
              ;
              (func-for-waiting-signal)))) ; here I don`t know how to create function waiting signal to continue fetching data
   (seq_id @lazyseq_maps)))

你能帮助我应该使用哪些 clojure 工具来解决我的问题吗?我认为我应该使用 core.async 来创建循环通道。我对吗?如果我收到适当的信号,我应该如何创建停止执行循环 10 分钟或继续执行的函数?


事实上你应该为此使用 core.async ,他们有timeout https://clojuredocs.org/clojure.core.async/timeout用于超时目的的通道和alt! https://clojuredocs.org/clojure.core.async/alt!您可以“等待”从任意数量的通道中弹出一个值。不过完整的代码会有点复杂。输出行将被“推送”到输出通道。

据我所知with-open并且惰性序列不能很好地组合,因为光标会过早关闭。但我不熟悉 clojure.jdbc 库。

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

如何在 Clojure 中按部分生成惰性序列? 的相关文章

  • 使用 ember.js 无限滚动(延迟加载)

    我有一个视图 其中可能有大量项目供用户滚动 我想实现无限滚动以实现内容的渐进加载 看起来有些人已经做了分页 https stackoverflow com questions 8778259 ember js rendering large
  • 什么可能导致输出参数访问时出现 SQL Server JDBC 错误“未为参数号 0 设置值”?

    我有一些访问 SQL Server 2005 的 Java 代码 如下所示 CallableStatement cstmt Set input parameters cstmt registerOutParameter 11 Types I
  • SQL Server 2000 JDBC 驱动程序

    我试图找到 SQL SERVER 2000 JDBC 驱动程序 用于从 SQL SERVER 提取数据 并执行一些用 Java JSF 实现的操作 知道在哪里可以找到司机吗 毫不奇怪 Microsoft com MSDN 停止支持并因此提供
  • 如何在 repl 中加载新的 clojure 库

    所以我有这个工作流程问题 我很高兴在我的 clojure 项目 repl 上打字 并意识到我需要另一个不在我的库中的库project clj 在这种情况下 我需要tools cli图书馆 我打开project clj在我的编辑器中添加一个条
  • 在 Clojure 中的函数上使用“apply”时,如何显式指定名称空间?

    这里的 graph 是高阶函数 它返回一个在其范围内设置了配置的函数 ns bulbs neo4jserver graph defn out1 Test func that simply returns out1 config out1 d
  • R:连接到 Teradata 时 JDBC() 找不到 Java 驱动程序路径

    我正在尝试通过 RStudio 连接到 Teradata 但由于某种原因 JDBC 函数在识别 Java 驱动程序所在的路径时出现问题 请参阅下面的代码 library RODBC library RJDBC library rJava b
  • Clojure 中的宏和函数

    我在这个 Clojure 教程中读到了以下行 http java ociweb com mark clojure article html Macros http java ociweb com mark clojure article h
  • Clojure:对于 n 维

    Clojure 中的函数for可用于迭代嵌套序列 想象一个具有 x y 和 z 轴的 3D 空间 for x range 10 y range 5 z range 2 x y z 上面的代码将生成一个向量序列 表示长方体内所有可能的位置 当
  • Spring boot JDBC无法连接docker容器中的mysql

    我正在尝试在两个单独的 docker 容器中运行 spring boot 应用程序 作为简单的 REST api 和 mysql 服务器 但是 我无法在 Spring 应用程序中获取 jdbc 连接来连接 mysql 它们都是独立工作的 当
  • Leiningen 在哪里安装 clojure 库?

    第一次运行lien 它会安装clojure 但是要安装吗 似乎并不在 图书馆 图书馆 lein clojure jar 和贡献 jar 在 Unix OS X 标题 上是否有固定位置 Leiningen使用maven 或者更准确地说 是实现
  • 通过 JDBC 将“daterange”字段值插入 PostgreSQL 表

    我在 PostgreSQL 9 3 有一个表日期范围 http www postgresql org docs 9 3 static rangetypes html字段类型 我可以像使用 JDBC 的字符串一样选择此字段 但无法将其插入表中
  • 如何在 F# 中执行 Seq.takeWhile + 一项

    我想编写一个使用谓词过滤序列的函数 但结果还应该包括谓词返回 false 的第一个项目 如果 F 中有一个break关键字 逻辑将是这样的 let myFilter predicate s seq for item in s do yiel
  • 在 Clojure 中检测操作系统

    是否有与 Common Lisp 相当的东西 features 在Clojure中 这样你就可以检测操作系统和其他环境配置 或者我只是通过 Java API 来实现这一点 可能使用Java API 这很容易 没有必要重新发明轮子 user
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 浏览器显示 clojure 环中不存在 access-control-allow-origin 标头

    我通过客户端浏览器向服务器发出请求 如下所示https example com bar https example com bar 但出现错误 Access to XMLHttpRequest at https example com ba
  • 如何将目录添加到 Clojure 的类路径?

    我已使用 Maven 将库安装到 m2 repository 目录中 我想将该路径添加到默认的 Clojure 类路径中 我找不到如何执行此操作的文档 有什么提示吗 Cheers clj Clojure 1 4 0 user gt requ
  • Clojure 为什么命名为 Clojure

    为什么该语言的名称是 Clojure 我用谷歌搜索了一下 在 clojure 中询问 到目前为止 还没有运气 Rich Hickey 他是 Clojure 的设计者 对此的评论是 wiki 上的第一个参考链接 您是否根据以 closure
  • 排序映射对现有键返回 nil 值

    我尝试从排序映射中按键获取值 并按其返回的值进行比较nil def tmap 1 v 1 2 v 2 3 v 3 def tmap sorted apply sorted map by let val comp compare get in
  • JDBC插入实数数组

    我试图将一个真实的数组插入到 postgresql 数组中 该表的定义是 String sqlTable CREATE TABLE IF NOT EXISTS ccmBlock sampleId INTEGER block REAL 插入内
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是

随机推荐

  • WCF REST:请求中的 XML 是什么样子的?

    我的 WCF 服务中有以下方法 OperationContract WebInvoke Method POST BodyStyle WebMessageBodyStyle Bare ResponseFormat WebMessageForm
  • 为什么我的 cookie 设置没有被应用?

    基于这里的答案 如何将 bool 值写入 cookie 或从 cookie 读取 bool 值 https stackoverflow com questions 16765467 how can i write and read bool
  • 直方图或包数据结构的 Objective-C 实现

    我没有实现自己的实现 而是想知道是否有人知道我可以使用的 Objective C 中的直方图或包数据结构实现 本质上 直方图是列表的哈希图 其中列表包含与其哈希条目相关的值 一个很好的例子是超市商品的直方图 您可以将每组商品乳制品 肉类 罐
  • 通过 phpDriver 插入时 Mongodb 2.6 中的 NumberLong

    当你在 Mongo 2 6 中做这样的事情时db test insert a 1 b 2 3 你会得到 id ObjectId a 3 b 2 3 没什么意外的 当我通过 php 做类似的事情时Mongo 2 4 10 with 1 4 5
  • Eclipse 的搜索和替换中的匹配组语法是什么

    在 Eclipse 上执行搜索 替换并使用 匹配组 的语法是什么 是它的名字吗 在 vi 上我执行以下操作 s log log 1 debug g 还有像这样的一行 log Message 替换为 log Message debug Ecl
  • kops - 获取错误的 kubectl 上下文

    I use kops在aws中创建kubernetes集群 我想使用以下命令验证集群 kops validate cluster 标准输出给我 Using cluster from kubectl context minikube 我认为问
  • 为地图分配值的最有效方法

    哪种方式为地图分配值最有效 或者它们都针对相同的代码进行了优化 在大多数现代编译器上 1 Assignment using array index notation Foo Bar 12345 2 Assignment using memb
  • 使用 Rhino 在 Eclipse 中调试 Javascript

    我已经安装了适用于 Eclipse 的 JavaScript 开发工具插件 但无法运行或调试 JavaScript 项目 我想使用内置的 Rhino 解释器进行调试 而不是使用网络浏览器 我创建了一个 JavaScript 项目 当我尝试创
  • PostgreSQL:将lo_import中的内容保存到表中

    主要问题 https stackoverflow com questions 22074987 using pg read file read file in desktop postgresql 我想在 PostgreSQL 中使用 lo
  • 如何使用javascript在jsp中对从数据库生成的html表的列进行求和?

    我正在我的网站上工作 我想通过 jsp 使用 javascript 对 html 表的一列中的值进行求和 我发现了各种可以添加已放入的静态数据的代码 但是当我在代码中使用相同的东西时 它不起作用 JavaScript 如下
  • Python(足球比赛算法烦恼)

    我正在尝试编写足球小组赛的算法 例如 我在舞台上有4支球队 teams team1 team2 team3 team4 然后我得到了一对独一无二的 import itertools team pairs list itertools com
  • 将对象传递给 UITypeEditor

    我目前希望使用 PropertyGrid 来允许用户编辑我的一些类 但是我在将对象传递给他们使用的 UITypeEditor 时遇到了困难 当用户按下下拉菜单时 我想显示一个已加载纹理的列表框以供选择 如果他们想使用应用程序尚未加载的纹理
  • 从SVN迁移后断开GIT分支

    尝试查看几十个帖子 但仍然没有得到我想要的 Preface 我们最初有一个非常大的 SVN 存储库 没有主干 标准结构 等 所以 我正在工作的项目也没有结构 在子文件夹内 我在这个项目上工作了大约几个月 然后遇到了一个情况 我需要一个分支来
  • 仅将变量向下传递到子目录

    如何将项目特定变量传递到子目录 我想知道是否有一种 官方 方式可以做到这一点 CMAKE BUILD TYPE is one of None Debug Release RelWithDebInfo set specific build t
  • 如何使用键盘快捷键移动 Eclipse 选项卡?

    我想在 Eclipse 中移动我的选项卡 如下所示 From this To this 但是使用键盘快捷键 因为每次只是为了重新排序选项卡而使用鼠标执行此操作非常烦人 任何想法 There is no such a shortcut Tab
  • jQuery .on() 方法看不到新元素

    我正在获取一个 JSON 元素并从其项目构建一个列表 如下所示 getTitles function data data data var list getJSON titles data function data each data d
  • 应用程序安装失败:无法写入设备

    在 Xcode 6 3 中 当我尝试在真实设备上运行用 Swift 编写的 iOS 项目时 出现此错误 应用程序安装失败 无法写入设备 我尝试清理项目并再次运行 但出现相同的错误 我该如何修复这个错误 删除设备上的应用程序并再次运行该项目对
  • 如何为 kubernetes 部署提供静态 ELB 端点

    每次我在 kubernates 中部署新版本时 我得到不同的 EXTERNAL IP 在下面的情况下是 afea383cbf72c11e8924c0a19b12bce4 xxxxx us east 1 elb amazonaws com k
  • 无法使用新门户在 Azure AD 中添加 Microsoft 帐户

    我们的一些客户正在使用外部 Microsoft 帐户来访问 AAD 服务 由于我们未与他们的域关联 并且其中一些人使用 Gmail 帐户 因此几乎不可能将他们的整个域添加到我们的 AAD 中 旧门户 manage windowsazure
  • 如何在 Clojure 中按部分生成惰性序列?

    我有一个数据库服务器 我从中获取数据 有时数据有数百万行甚至更多 所以我使用惰性下载 我使用 clojure jdbc 库中的服务器端游标https funcool github io clojure jdbc latest cursor