Tôi tiếp tục gặp phải các vấn đề về mysql trong khi công nhân thực hiện các tác vụ ngay sau khi tạo.Tạo kết nối cơ sở dữ liệu riêng biệt cho mọi công nhân cần tây
Chúng tôi sử dụng django 1.3, cần tây 3.1.17, djorm-ext bơi 0,5
Chúng tôi bắt đầu quá trình cần tây với đồng thời 3. obeservation tôi cho đến nay là, khi bắt đầu quá trình công nhân, tất cả họ đều nhận được cùng một mysql connecition. Chúng tôi đăng nhập id kết nối db như dưới đây.
from django.db import connection
connection.cursor()
logger.info("Task %s processing with db connection %s", str(task_id), str(connection.connection.thread_id()))
Khi tất cả công nhân nhận nhiệm vụ, người đầu tiên thực hiện thành công nhưng hai người kia lại gặp lỗi Mysql lạ. Nó hoặc là lỗi với "Mysql server biến mất", hoặc với một điều kiện mà Django ném "DoesNotExist" lỗi. rõ ràng các đối tượng mà Django đang truy vấn tồn tại.
Sau lỗi này, mỗi nhân viên bắt đầu nhận được kết nối cơ sở dữ liệu riêng của mình sau đó chúng tôi không tìm thấy bất kỳ vấn đề nào.
Hành vi mặc định của cần tây là gì? Nó được thiết kế để chia sẻ cùng một kết nối cơ sở dữ liệu. Nếu như thế nào là giao tiếp giữa các quá trình xử lý? Tôi lý tưởng sẽ thích kết nối cơ sở dữ liệu khác nhau cho mỗi công nhân.
Tôi đã thử mã được đề cập trong liên kết bên dưới không hoạt động. Celery Worker Database Connection Pooling
Chúng tôi cũng đã sửa mã cần tây được đề xuất bên dưới. https://github.com/celery/celery/issues/2453
Đối với những người downvote câu hỏi, vui lòng cho tôi biết lý do giảm giá.
Bạn có đang sử dụng bất kỳ phần mềm trung gian kết nối Django nào không? Ngoài ra, 'CONN_MAX_AGE' của bạn trong cấu hình django là gì? Tôi nghĩ rằng điều này ảnh hưởng đến hành vi kết nối liên tục trong django. Điều này có thể liên quan đến hành vi mà bạn đang thấy, không phải điều gì đó với chính Celery. –
Bạn có thể chạy đồng thời = 1 và bắt đầu nhiều công nhân không? –
@AlexLuisArias Điều đó sẽ chỉ chạy một quy trình công nhân và không phải là trường hợp cho vấn đề trên. –