Python多处理和静态方法的使用

时间:2013-08-01 08:31:41

标签: python multithreading static multiprocessing static-methods

我们有一个运行由多处理队列连接的多个工作进程的应用程序。

为了处理数据库连接和可能的错误,我们构建了一个静态类,负责建立连接和处理错误。

摘录:

class DBConnector:


mysqlhost = "localhost"

mySQLConnections = dict()

@staticmethod
def getWaitingTime():
    return DBConnector.time_to_wait_after_failure

@staticmethod
def getRetries():
    return DBConnector.retries

@staticmethod
def getMySQLDB(database, user, pwd):
    '''return only new connection if no connection for this db, this user (and this thread) exists'''

    dbuserkey = database+user

    if dbuserkey in DBConnector.mySQLConnections:

        print "returning stored connection for "+dbuserkey
        pprint(DBConnector.mySQLConnections)
        return DBConnector.mySQLConnections[dbuserkey]

    else:
        print "returning new connection for "+dbuserkey
        pprint(DBConnector.mySQLConnections)
        mySQLConn = MySQLConnection(DBConnector.mysqlhost, database, user, pwd, DBConnector.retries, DBConnector.time_to_wait_after_failure)
        DBConnector.mySQLConnections[dbuserkey] = mySQLConn
        return mySQLConn

我们记得每个工作进程现在都使用这种静态方法来获取数据库连接并遇到奇怪的问题。

我们期望当我们启动10个调用静态方法的Worker时,将有10个不同的数据库连接。但相反,存在一种非确定性行为,导致各种数量的连接有时会有3种不同或7种不同的连接。

我称之为持有静态方法的类的“伪”实例。

这种行为是正常的吗?或者它是一个错误还是一些?

0 个答案:

没有答案