Python 每个实例创建的新文件

Python 每个实例创建的新文件,python,file,static-variables,Python,File,Static Variables,我有一个类需要写入文件。我的程序创建了多个这样的类,我希望避免写冲突。我试图通过使用静态变量来避免它,这样每个类都有一个唯一的文件名。即: class Foo: instance_count = 1 @staticmethod def make(): file_name = Foo.instance_count + '-' + 'file.foo' Foo.instance_count += 1 Foo(file_name

我有一个类需要写入文件。我的程序创建了多个这样的类,我希望避免写冲突。我试图通过使用静态变量来避免它,这样每个类都有一个唯一的文件名。即:

class Foo:
    instance_count = 1

    @staticmethod
    def make():
        file_name = Foo.instance_count + '-' + 'file.foo'
        Foo.instance_count += 1
        Foo(file_name)

    def Foo(self, fname):
        self.fname = fname
这在某种程度上是有效的,但在类可以并行创建的情况下不起作用。我怎样才能使它更健壮

编辑:
我的用例在我的应用程序中创建了这个类,它由gunicorn提供服务。因此,我用gunicorn启动了我的应用程序,比如说10个工人,所以我实际上无法管理他们之间的通信。

很简单,只需使用另一个文本文件来保存需要识别的文件名和编号/代码。您可以使用JSON、pickle或您自己的格式

在_init _函数中,可以读取文件。然后,根据获得的信息创建一个新文件

文件示例:

File1.txt,1
Fil2e.txt,2
以及uuu init uuu函数:

def __init__(self):
    counter = int(open('counter.txt', 'r').read()[-2:].strip())
    with open("File%d.txt"%counter+1, "w"):
         #do things
    #don't forget to keep the information of your new file

如果您想要的是唯一的名称,则可以使用类似的名称

编辑:


如果您想要可读但唯一的名称,我建议您考虑使用锁来保护上面的增量语句,这样在任何时间点都只有一个进程在增加它,并且可能使文件创建和增量操作原子化。

实际上,我要寻找的是一种避免写争用的方法。然后我意识到为什么不直接使用记录器。这可能是一个错误的假设,但我认为日志记录器负责锁定文件以进行写入。此外,它在每次写入时都会刷新,因此它满足了这一要求。至于速度,在这种情况下,开销绝对不会影响我

我发现的另一个解决方案是使用tempfile类。这将为类的每个实例化创建一个唯一的文件

import tempfile as tf

class Foo:

    @staticmethod
    def make():
        file_name = tf.NamedTemporaryFile('w+',suffix="foofile",dir="foo/dir")
        Foo(file_name)

    def __init__(self, fname):
        self.fname = fname

你能详细解释一下你的意思吗?这难道不会有他们试图同时读取counter.txt的问题吗?@riotburn不完全是这样,除非他们是在完全相同的时间创建的。他们在工作时将使用不同的文件。@riotburn我在上面添加了一个建议。虽然这是一个很好的答案,但在我的例子中,类的创建来自于通过gunicorn生成多个worker,因此,我不确定如何让他们交流。我认为你必须使用一种解决方案,将互斥体和持久性存储结合起来。正如@allKid所建议的,文件最后创建的文件名写入的位置。实际上,你能再解释一下你的用例吗:当你说并行时,你的确切意思是什么?