Tôi đang sử dụng cần tây 2.4.1 với python 2.6, phần phụ trợ thỏmq và django. Tôi muốn công việc của tôi có thể dọn dẹp đúng cách nếu nhân viên đóng cửa. Theo tôi biết bạn không thể cung cấp một destructor nhiệm vụ vì vậy tôi đã cố gắng hooking vào tín hiệu worker_shutdown.Thông báo cho công việc cần tây của công nhân tắt máy
Lưu ý: AbortableTask chỉ hoạt động với phần phụ trợ cơ sở dữ liệu để tôi không thể sử dụng.
from celery.signals import worker_shutdown
@task
def mytask(*args)
obj = DoStuff()
def shutdown_hook(*args):
print "Worker shutting down"
# cleanup nicely
obj.stop()
worker_shutdown.connect(shutdown_hook)
# blocking call that monitors a network connection
obj.stuff()
Tuy nhiên, móc tắt máy không bao giờ được gọi. Ctrl-C'ing người lao động không giết nhiệm vụ và tôi phải tự giết nó khỏi trình bao.
Vì vậy, nếu đây không phải là cách thích hợp để thực hiện, làm cách nào để cho phép các tác vụ tắt trơn tru?
ý tưởng Bất kỳ làm thế nào để thông báo nhiệm vụ để ngăn chặn từ người lao động? –
@RomanPodlinov - xem tài liệu Celery cho '' revoke() '' - bạn có thể tùy ý gửi một tín hiệu mà nhân viên có thể nắm bắt để làm sạch. – RichVel
Tôi không hiểu. Có tín hiệu nào được phát ra sau khi '--soft-time-limit' kết thúc không? Nếu vậy thì cái nào? –