首页 > 解决方案 > 如何计算实例的索引?

问题描述

我想像这样启动多个服务器:

Server 1
Server 2
Server 3

我已经写了一段代码:

class Server:
     def __init__(self, index):
          self.index = index

我的主要是这样的:

server1 = Server(1)
server1.run()

所以我的问题是你可以在标题中读到:如何动态地全局计算不同实例(服务器)的索引?

标签: pythonoopserverconstructorinstance

解决方案


将总实例计数存储在类变量中。

class Server:
    instances = 0   
    def __init__(self):
         Server.instances += 1
         self.index = Server.instances

跨多个实例解决此问题需要更多工作。您必须使用文件来保存计数器,并且您必须确保两个进程不会争夺下一个打开文件的人。这应该适用于 Linux:

import fcntl
class Server:
    CNTR = 'mycounter.txt'
    def __init__(self):
        if not os.path.exists(CNTR):
            open(CNTR,'w').write('0')
        fctl.lock( f, fcntl.LOCK_EX )
        n = int(open(CNTR).read()) + 1
        open(CNTR,'w').write(str(n))
        fctl.lock( f, fcntl.LOCK_UN )

        self.index = n

推荐阅读