Запрос mysql в многопоточности / процесс - PullRequest
0 голосов
/ 14 апреля 2020

1.Я знаю, что произойдет ошибка, когда соединение используется несколькими потоками. not.why?

Разве они не используют одно и то же соединение от db = sql.connect(ipAddress,db='mydb')?

с db.commit (), при совместном подключении к соединению потока и процесса произойдет ошибка.

db = sql.connect(ipAddress,db='mydb')
def query():
    ii = 0
    while 1:
        cur = db.cursor(sql.cursors.Cursor)
        try:
            ii += 1
            s = 'ii:{}'.format(ii)
            cur.execute('''update test set count='{}' where name = 'sean' ''' .format(s))
            db.commit()
            cur.execute('''select count from test ''')
            rcv = cur.fetchall()
            print(cur,rcv)

        except (sql.Error,sql.Warning) as e:
            print(e)

        cur.close()
        time.sleep(1)

def getdb():
    while 1:
        cur1 = db.cursor(sql.cursors.Cursor)
        try:
            cur1.execute('''select count from test where name ='sean' ''')
            rcv = cur1.fetchall()
            print(cur1,rcv)

        except (sql.Error,sql.Warning) as e:
            print(e)

        cur1.close()
        time.sleep(1)

event = mp.Process(target = query)
event.start()
time.sleep(3)

event = mp.Process(target = getdb)
event.start()

2. Я создаю два соединения для каждого потока или процесса. Я не знаю, почему я получил последнее значение ii только в первый раз, когда оба соединения обращаются к одной и той же базе данных. Как это могло произойти?

db = sql.connect(ipAddress,db='mydb')
db1 = sql.connect(ipAddress,db='mydb')
def query():
    ii = 0
    while 1:
        cur = db.cursor(sql.cursors.Cursor)
#        same code given above

def getdb():
    while 1:
        cur1 = db1.cursor(sql.cursors.Cursor)
#        same code given above
<MySQLdb.cursors.Cursor object at 0x75ff3ef0> (('ii:50',), ('!999!',), ('$5555555555$',))
<MySQLdb.cursors.Cursor object at 0x75ff3ef0> (('ii:3',),)
<MySQLdb.cursors.Cursor object at 0x75ff3ed0> (('ii:51',), ('!999!',), ('$5555555555$',))
<MySQLdb.cursors.Cursor object at 0x75ff3e50> (('ii:3',),)
<MySQLdb.cursors.Cursor object at 0x75ff3e90> (('ii:52',), ('!999!',), ('$5555555555$',))
<MySQLdb.cursors.Cursor object at 0x75ff3f70> (('ii:3',),)
<MySQLdb.cursors.Cursor object at 0x766cb0b0> (('ii:53',), ('!999!',), ('$5555555555$',))
...