Tôi có một kịch bản Python chính kết nối với một cơ sở dữ liệu MySQL và rút ra một vài bản ghi từ nó. Dựa trên kết quả trả về nó bắt đầu như nhiều chủ đề (các cá thể lớp) khi nhiều bản ghi được nắm bắt. Mỗi luồng sẽ quay trở lại cơ sở dữ liệu và cập nhật một bảng khác bằng cách đặt một cờ trạng thái sang trạng thái khác ("quá trình bắt đầu").Làm thế nào để xử lý các kết nối MySQL (s) với đa luồng Python
Để đạt được điều này tôi đã cố gắng để:
1.) Vượt qua kết nối cơ sở dữ liệu cho tất cả các chủ đề 2.) Mở một kết nối cơ sở dữ liệu mới từ mỗi thread
nhưng không ai trong số họ đang làm việc.
Tôi có thể chạy cập nhật mà không gặp bất kỳ vấn đề nào trong cả hai trường hợp bằng cách sử dụng try/except, nhưng bảng MySQL chưa được cập nhật và không có lỗi nào được tạo. Tôi đã sử dụng cam kết trong cả hai trường hợp.
Câu hỏi của tôi sẽ là cách xử lý (các) kết nối MySQL trong trường hợp này?
Cập nhật dựa trên vài ý kiến đầu tiên:
MAIN SCRIPT
-----------
#Connecting to DB
db = MySQLdb.connect(host = db_host,
db = db_db,
port = db_port,
user = db_user,
passwd = db_password,
charset='utf8')
# Initiating database cursor
cur = db.cursor()
# Fetching records for which I need to initiate a class instance
cur.execute('SELECT ...')
for row in cur.fetchall() :
# Initiating new instance, appending it to a list and
# starting all of them
CLASS WHICH IS INSTANTIATED
---------------------------
# Connecting to DB again. I also tried to pass connection
# which has been opened in the main script but it did not
# work either.
db = MySQLdb.connect(host = db_host,
db = db_db,
port = db_port,
user = db_user,
passwd = db_password,
charset='utf8')
# Initiating database cursor
cur_class = db.cursor()
cur.execute('UPDATE ...')
db.commit()
khó để nói bất cứ điều gì mà không biết làm thế nào bạn kết nối với DB của bạn và làm thế nào để bạn thực hiện các bản cập nhật. – Ashalynd
Tôi không hiểu rõ câu hỏi của bạn. Là trường hợp đơn giản nhất làm việc, như python thread đơn kết nối với mysql và cập nhật một bảng? – qqibrow
@Ashalynd Cảm ơn bạn đã dành thời gian! Và xin lỗi nhưng tôi là AFK. Tôi đã cập nhật câu hỏi của mình bằng một mã snipet từ mã chính và lớp học của mình. Đây là cách tôi bắt đầu các cá thể và mở các kết nối cơ sở dữ liệu. Tôi đã cố gắng để bắt lỗi khi mở kết nối và thực hiện truy vấn từ dụ với try/except mà không có bất kỳ may mắn. – g0m3z