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$',))