Tôi có hai máy chủ: một máy đang chạy ứng dụng django và một máy chạy cả hàng đợi thỏ và một công nhân cần tây. Tasks.py của tôi trên máy chủ đang chạy hàng đợi/công nhân có nhiệm vụ như sau:Chạy nhiệm vụ cần tây khi không thể nhập nhiệm vụ
@task(queue="reports")
def test_task():
time.sleep(120)
Mục tiêu của tôi là thực hiện tác vụ này từ chế độ xem django. Kể từ khi mã cho nhiệm vụ là trên một máy chủ khác với xem django tôi muốn gọi nhiệm vụ, tôi đang cố gắng sử dụng mã sau đây để gửi nhiệm vụ từ django đến máy công nhân.
send_task("tasks.test_task", task_id=task_id, args=[], kwargs={}, publisher=publisher, queue=queue)
Tôi đã tìm thấy phương pháp này here, nhưng cho đến nay thử nghiệm chưa hoạt động.
Tôi đang thử nghiệm với đuôi -F trên nhật ký công nhân cần tây trên máy chủ công nhân cần tây, sau đó điều hướng đến url của chế độ xem chứa send_task trong trình duyệt. Tôi đang tìm kiếm nhiệm vụ để hiển thị như là 'nhận' trong đầu ra đuôi, nhưng nó không.
Mức nhật ký của công nhân cần tây là DEBUG, tệp nhật ký cho thấy tác vụ được đăng ký với tên thích hợp và settings.py của ứng dụng django chứa IP và thông tin xác thực chính xác cho máy chủ thỏmq. Trong cố gắng tiếp cận khác nhau, tôi đã thỉnh thoảng nhìn thấy một thông báo lỗi trong nhật ký cần tây khi tôi thay đổi chuỗi thông qua để send_task đến một cái gì đó mà không phải là một nhiệm vụ hợp lệ (tức là send_task ('asdf')). Điều này gây ra một UnregisteredError trong logfile. Tuy nhiên, điều này chỉ xảy ra đôi khi, và cho đến nay trong thử nghiệm kết hợp khác nhau của các thiết lập và các cuộc gọi, tôi đã không tìm thấy một cách để sao chép đáng tin cậy hành vi.
Ngoài ra, đây là phần có liên quan của settings.py về dự án django (với giá trị thực tế loại bỏ):
CELERY_RESULT_BACKEND = 'amqp'
BROKER_HOST = 'the.correct.IP.address'
BROKER_USER = 'the_correct_user'
BROKER_PASSWORD = 'the_correct_pass'
BROKER_VHOST = 'the_correct_vhost'
BROKER_PORT = 5672
Tôi đã googled xung quanh và đã không tìm thấy nhiều vào send_task. Bất kỳ ý tưởng về những gì tôi có thể làm sai?
Tôi muốn biết cách bạn chia sẻ mã của mình giữa hai máy. Đây là một câu hỏi tôi đã viết liên quan đến điều đó: http://stackoverflow.com/questions/28592243/celery-tasks-functions-web-server-vs-remote-server Cảm ơn! – lajarre