clojure 中惯用的文件锁定?

2024-01-07

我有一组来自队列的 future 处理作业,涉及写入文件。确保一次只有一个未来访问特定文件的惯用方法是什么?


使用代理而不是锁来确保这一点怎么样?

我认为使用代理来保护共享的可变状态,无论它是在内存中还是在磁盘上,在 clojure 中比使用锁更惯用。

如果您一次创建一个代理并将访问尝试发送给代理,则可以确保一次只有一个线程访问给定文件。

例如这样:

(use 'clojure.contrib.duck-streams)

(defn file-agent [file-name]
  (add-watch (agent nil) :file-writer 
    (fn [key agent old new] 
      (append-spit file-name new))))

(defn async-append [file-agent content]
  (send file-agent (constantly content)))

然后通过代理附加您的文件:

(async-append "content written to file" (file-agent "temp-file-name"))

如果您需要同步使用文件,可以使用await 来实现。像这样:

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

clojure 中惯用的文件锁定? 的相关文章

随机推荐

  • 在 python 中更新 tkinter 标签

    我正在努力通过将服务器的根实例传递到 Tkinter 窗口来为 python 服务器提供带有 tkinter 的 GUI 问题在于如何使标签中的信息保持最新 例如 服务器有一个用户列表 其中包含登录的用户 对于初始列表来说 这样做很简单 s
  • excel vba-提取2个字符之间的文本

    如果我有这个专栏 ColA NUMBER 8 3 NUMBER 20 我需要一个可以运行的 VBA 函数 请注意 这些开始和结束字符串只会在单元格中出现一次 extract val 单元格 start str end str IE extr
  • 将参数从 Jenkinsfile 传递到共享库

    我有几个组件 带有自己的 Bitbucket 存储库的代码项目 每个组件都有一个 Jenkinsfile 如下所示 properties parameters string defaultValue description List of
  • Azure AD B2C - 从所有会话中注销用户

    我有 3 个网站使用一个 B2C 租户 我被要求进行设置 以便当用户退出一个网站时 退出所有网站 如果他们的帐户被删除 情况也是如此 我认为我必须在每个请求上引入对 Azure 的调用 以确定用户是否仍然登录 但据我所知 没有一个 Grap
  • 如何禁用 HTML 标签?

    如果已经设置了标签 我想禁用它 例如 使用禁用菜单disabled true 或者其他的东西 我可以使用 PHP 完全删除标签 但我已经设计了它的样式 只想禁用它 是否可以 不 据我所知 没有任何仅 CSS 的方法可以按照您描述的方式禁用链
  • Python 字符串格式化:“%”比“format”函数更有效吗?

    我想比较不同的变量以在 Python 中构建字符串 using 连接 称为 加 using using join list using format功能 using 0
  • WPF:TreeViewItem 绑定到 ICommand

    我正忙于在 WPF 中创建我的第一个 MVVM 应用程序 基本上我遇到的问题是我有一个 TreeView System Windows Controls TreeView 我已将其放置在 WPF 窗口上 我决定将绑定到 CommandVie
  • 更改表类似

    是否可以在 ALTER TABLE 上使用类似于 MySQL 中的 CREATE TABLE 的 LIKE 语句 例如 创建表 db tbl1 像 db tbl2 这会克隆数据库表的结构 我想更改具有相同列的现有表 但要选择另一个表的主键
  • 如何设置字符串的颜色[重复]

    这个问题在这里已经有答案了 有谁知道我将如何设置将使用打印的字符串的颜色System out 这是我目前拥有的代码 System out println TEXT THAT NEEDS TO BE A DIFFERENT COLOR 安慰
  • 将 pandas 数据框中的多列拆分为行

    我有一个 pandas 数据框 如下所示 ticker account value date aa assets 100 200 20121231 20131231 bb liabilities 50 150 20141231 201312
  • 正则表达式的局限性? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Typescript 创建模块

    我想为我们的库创建模块 所以每次我们调用时 我们都可以使用import Api Map from ourlibrary 目前我正在使用以下 import Api from Library Api import MapPage from ma
  • 非常非常大的实体组的交易

    我正在尝试设计一个可以容纳大量数据的数据模型 有大量数据经验的人对此有什么反馈吗 即 example only not meant to compile public class TransactionAccount private lon
  • 如何对每小时时间序列重新采样以在特定时间开始并在 24 小时后结束

    我想从一天中的特定时间开始 在我的情况下 将从 2020 年 2 月 1 日 06 UTC 开始 对我的数据框进行重新采样 包括每小时降水量值 频率为 24 小时 2020 02 01 每小时数据帧图像 I tried df df resa
  • PHP,如何重定向/转发带标头和正文的 HTTP 请求?

    我有一个 PHP 页面 main php 位于服务器 1 上 我在服务器 2 上有一个 PHP 页面 main php 同一页面 不同的代码 main php 是一个 Web 服务 我想转发对服务器 1 服务器 2 发出的完整 HTTP 请
  • Angular - 生成的表格单元格上的(单击)事件

    我一直在尝试在动态生成的表格中的单元格上添加 单击 事件 HTMLtoAdd any Input roles string ngOnInit let alphabet A B C D E F G H I J K L M N O P Q R
  • 如何用类创建div

    我正在尝试创建一个 div 并给他上一堂课 但它不起作用 有人可以帮助我吗 document ready function input type checkbox each function this after div div class
  • Vue.js - 如何将 props 传递给孙子

    我有以下应用程序结构 RegistrationView holds the data logic like get post RegistrationForm holds the form Registration Radio Compon
  • 使用 JSch 跳过 Kerberos 身份验证提示 [重复]

    这个问题在这里已经有答案了 我正在使用Connect 方法中的Ssh下面的 Java 类用于使用 SSH JSch 连接到服务器并在服务器中运行命令 问题是运行时Connect 服务器提示以下消息 Kerberos username Ker
  • clojure 中惯用的文件锁定?

    我有一组来自队列的 future 处理作业 涉及写入文件 确保一次只有一个未来访问特定文件的惯用方法是什么 使用代理而不是锁来确保这一点怎么样 我认为使用代理来保护共享的可变状态 无论它是在内存中还是在磁盘上 在 clojure 中比使用锁