繁体   English   中英

Python - 如何防止文件被多次打开?

Python - How can I prevent a file from being opened more than once?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在使用 discord.py 设计一个 Discord 机器人,并且需要将用户信息存储在文件中。 我担心的问题是,如果同时执行两个命令,机器人将尝试同时从两个脚本访问同一个用户的信息文件。 有没有一种非常简单的方法可以锁定文件访问? 我试过使用谷歌,但它并没有真正让我在任何地方,所以我正在尝试这个。

提前致谢!

1 个回复

您正在描述一种称为os.O_NONBLOCK condition 的条件,它有很多不同的对抗方法,但我认为最好的方法是使用os.O_NONBLOCK

import os
with open('/path/to/file', 'a', os.O_NONBLOCK) as f:
    f.write('text')
    f.flush()

有关更多信息,请参阅答案

一般来说,我认为最好使用已经有针对此问题的内置解决方案的“真实”数据库(例如 SQLite 或 mongo)

1 如何防止多次选择组合框值?

我需要你的帮助。 我有这种方法: 这是ADD按钮的方法,它允许用户在网格中添加一个值。 我需要检查用户尝试添加的值是否保存了一次,所以不能保存两次。 我需要验证它并向用户显示错误消息,但是我不知道该怎么做。 我想我必须在此行之前放置一个“ if”条件: 任何想法 ? ...

2 如何防止表单在5分钟内被提交多次?

我最近发现我的PM系统存在一个巨大的安全问题,它允许用户通过地址栏中的for循环尽可能多地发送消息。 有人把它放到地址栏中: 并且消息被发送了1000次给我,我的收件箱中充满了相同的消息,我的数据库非常充实,phpMyAdmin非常迟钝。 我的问题是,我该如何防止这种情况? 这 ...

4 如何防止表单被多次提交

我有一个表单,当您提交时,需要花一秒钟左右的时间才能将访问者重定向到另一个页面。 在第二秒中,他们有时间再按几次按钮,这显然不好。 我该如何预防? 我不想使用on click事件,因为我有验证器,并且我不希望在验证所有字段之前禁用提交按钮。 因此,无论我使用什么,都需要放在验证脚 ...

2014-07-09 13:42:41 2 457   jquery
5 如何防止模板类被多次派生?

我有以下模板类: 对于给定的模板参数I该模板类需要一次(并且仅一次)导出。 模板类T可以适应于实现这样的行为(而类A , B , U , V不能); 但是, T必须对派生类A , B , C没有任何了解。 有没有办法防止这样的模板类被多次派生? 理想情况下,在这种情况下 ...

6 如何防止模态多次被绘制?

这比我认为违背事物精神的常见问题更抽象,但我希望我仍能得到很好的回应。 这是问题所在。 我们有一个用PHP编写的相当复杂的Web应用程序。 目的是相对不重要的,但简单地说:我们使用Comet / AJAX / JSON / JavaScript / PHP / MySQL(没有jQue ...

7 如何防止一个方法被多次调用

假设我有这些方法 然后我有我的TestNg测试类如下 现在,如果我将T1和T2作为测试套件的一部分运行,它会运行两次obtainAuth()方法(一次在T1 ,一次在T2 )。 由于我将这两个测试作为同一个套件的一部分运行,因此它应该只运行obtainAuth()方法并以static方式存储 ...

8 如何防止在随机数生成器中多次生成整数

我想在国际象棋棋盘中生成随机坐标,而不会多次生成任何坐标。 我尝试使多个count变量跟踪每个坐标(例如a5,h7),但是我意识到为每64个坐标创建参数将花费一些时间。 有没有更快的方法? ...

2019-05-18 17:35:43 2 98   c++
9 Ember.js:如何防止多次击中该属性观察器?

在我的控制器中,我有一个属性和一个观察该属性的函数。 当属性更改一次时,观察者将被击中3次-用旧数据两次,用新数据一次。 您可以在刚刚创建的jsbin的控制台窗口中看到它的发生: jsbin 用法:单击其中一本书(不是第一本书),然后在控制台窗口中查看结果。 在我的实际应用 ...

10 当同时触发多个更改事件时,如何防止函数多次运行?

当我单独单击每个复选框时,一切正常且没有问题。 当我单击按钮一次检查它们时,当有大量市政当局循环时可能会导致问题。 它会导致下拉列表闪烁并阻止用户选择选项,因为整个选择都被重置。 $("#muniTable :checkbox").change()事件为每个被选中的复选框触发。 当我单击按钮以一次 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM