L'accès à une connexion MySQL piscine de Python de multitraitement

Je suis en train de configurer une connexion MySQL piscine et de mon processus de travail d'accès déjà en place piscine au lieu de la configuration d'une nouvelle connexion à chaque fois.

Je suis confus si je passe le curseur base de données pour chaque processus, ou s'il y a une autre façon de faire? Ne devrait pas MySql.connecteur de faire la mise en commun automatiquement? Quand j'ai vérifier mes fichiers journaux, beaucoup, beaucoup de connexions sont ouvertes et fermées ... un pour chaque processus.

Mon code ressemble à ceci:

PATH = "/tmp"

class DB(object):
  def __init__(self):
    connected = False
    while not connected:
      try:
        cnxpool = mysql.connector.pooling.MySQLConnectionPool(pool_name = "pool1",
                                                          **config.dbconfig)
        self.__cnx = cnxpool.get_connection()
      except mysql.connector.errors.PoolError:
        print("Sleeping.. (Pool Error)")
        sleep(5)
      except mysql.connector.errors.DatabaseError:
        print("Sleeping.. (Database Error)")
        sleep(5)

    self.__cur = self.__cnx.cursor(cursor_class=MySQLCursorDict)

  def execute(self, query):
    return self.__cur.execute(query)

def isValidFile(self, name):
  return True

def readfile(self, fname):
  d = DB()
  d.execute("""INSERT INTO users (first_name) VALUES ('michael')""")

def main():
  queue = multiprocessing.Queue()
  pool = multiprocessing.Pool(None, init, [queue])
  for dirpath, dirnames, filenames in os.walk(PATH):

    full_path_fnames = map(lambda fn: os.path.join(dirpath, fn),
                           filenames)
    full_path_fnames = filter(is_valid_file, full_path_fnames)
    pool.map(readFile, full_path_fnames)

if __name__ == '__main__':
  sys.exit(main())
Peut-être que eric.lubow.org/2009/python/... est utile pour vous.

OriginalL'auteur ensnare | 2014-06-23