目前我有一个循环,试图通过向文件名字符串添加后缀来查找未使用的文件名.一旦找不到文件,它就会使用无法打开具有该名称的新文件的名称.问题是这个代码在网站中使用,并且可能有多次尝试同时执行相同的操作,因此存在竞争条件.
如果在检查时间和另一个线程中打开时间之间创建一个文件,我如何防止python覆盖现有文件.
我可以通过随机化后缀来最小化机会,但是已经根据路径名的部分最小化了机会.我想用一个可以告诉的函数来消除这个机会,只有在它不存在的情况下才创建这个文件.
我可以使用win32函数来执行此操作,但我希望这可以跨平台工作,因为它最终将托管在linux上.
我想dict从一个同时运行的多个Python脚本中访问一个唯一的(键/值)数据库.
如果script1.py更新d[2839],script2.py则应在查询几秒后查看修改后的值d[2839].
我想过使用SQLite,但似乎从多个进程并发写入/读取不是SQLite的强项(假设script1.py刚刚修改过d[2839],script2.pySQLite连接怎么会知道它必须重新加载数据库的这个特定部分?)
当我想要刷新修改时,我还考虑过锁定文件(但这样做相当棘手),并使用json.dump序列化,然后尝试检测修改,json.load如果有任何修改则用于重新加载等等......哦,不,我重新发明轮子,重新发明一个特别低效的键/值数据库!
redis看起来像一个解决方案,但它没有正式支持Windows,同样适用于leveldb.
多个脚本可能想要在完全相同的时间写入(即使这是一个非常罕见的事件),有没有办法让数据库系统处理这个(感谢一个锁定参数?似乎默认SQLite不能做这是因为"SQLite支持无限数量的同时读者,但它只会在任何时刻允许一位作者.")
什么是Pythonic解决方案呢?
注意:我在Windows上,并且dict应该有最多1M项(键和值都是整数).
我所处的情况是这样的 - 有一个进程写入文件,有时文件相当大,比如400 - 500MB.我需要知道什么时候写完了.我怎么能确定这个?如果我查看目录,我会在那里看到它,但可能没有写完.此外,这需要远程完成 - 例如在同一个内部局域网上,而不是在同一台计算机上,通常想要知道文件写入完成的过程是在Linux机器上运行的,其中包含写入文件的进程和文件本身在Windows框中.没有桑巴不是一个选择.与该窗口框上的服务进行xmlrpc通信是一种选择,也可以使用snmp检查是否可行.
理想的情况下
够好了:
当前最好的想法是定期从Windows框中的某个进程打开有问题的文件,并查看检查PDF结束标记的最后字节并考虑eol差异,因为该文件可能是在Linux或Windows上创建的.