ฉันจะลบงานที่ค้างอยู่ทั้งหมดโดยไม่ทราบtask_id
งานแต่ละงานได้อย่างไร
ฉันจะลบงานที่ค้างอยู่ทั้งหมดโดยไม่ทราบtask_id
งานแต่ละงานได้อย่างไร
คำตอบ:
จากเอกสาร :
$ celery -A proj purge
หรือ
from proj.celery import app
app.control.purge()
(แก้ไข: อัปเดตด้วยวิธีปัจจุบัน)
redis-cli KEYS "celery*" | xargs redis-cli DEL
สิ่งที่ได้ผลสำหรับฉัน สิ่งนี้จะลบงานทั้งหมดที่เก็บไว้ในแบ็กเอนด์สีแดงที่คุณใช้
celery purge
(ภายใน env เสมือนที่เกี่ยวข้อง) Ooops - มีคำตอบเหมือนด้านล่าง ..... stackoverflow.com/a/20404976/1213425
-A
คือแอป Django ที่celery.py
เป็นที่ตั้งของ
สำหรับคื่นฉ่าย 3.0+:
$ celery purge
วิธีล้างคิวเฉพาะ:
$ celery -Q queue_name purge
celery -A proj purge
ถ้าคุณได้รับข้อผิดพลาดการเชื่อมต่อให้แน่ใจว่าคุณระบุแอปเช่น
เมื่อใช้ผู้ทำงานกับพารามิเตอร์ -Q เพื่อกำหนดคิวตัวอย่างเช่น
celery worker -Q queue1,queue2,queue3
จากนั้นcelery purge
จะไม่ทำงานเนื่องจากคุณไม่สามารถส่งต่อพารามิเตอร์ไปยังคิวได้ มันจะลบเฉพาะคิวเริ่มต้น วิธีแก้ปัญหาคือเริ่มต้นพนักงานด้วย--purge
พารามิเตอร์ดังนี้
celery worker -Q queue1,queue2,queue3 --purge
อย่างไรก็ตามสิ่งนี้จะเรียกใช้คนงาน
ตัวเลือกอื่น ๆ คือการใช้คำสั่งย่อย amqp ของคื่นฉ่าย
celery amqp queue.delete queue1
celery amqp queue.delete queue2
celery amqp queue.delete queue3
ในคื่นฉ่าย 3+:
CLI:
$ celery -A proj purge
programatically:
>>> from proj.celery import app
>>> app.control.purge()
http://docs.celeryproject.org/en/latest/faq.html#how-do-i-purge-all-waiting-tasks
ฉันพบcelery purge
ว่าไม่ได้ทำงานกับคื่นฉ่ายที่ซับซ้อนมากขึ้นของฉัน ฉันใช้คิวที่ตั้งชื่อหลายรายการเพื่อจุดประสงค์ที่แตกต่างกัน:
$ sudo rabbitmqctl list_queues -p celery name messages consumers
Listing queues ... # Output sorted, whitespaced for readability
celery 0 2
celery@web01.celery.pidbox 0 1
celery@web02.celery.pidbox 0 1
apns 0 1
apns@web01.celery.pidbox 0 1
analytics 1 1
analytics@web01.celery.pidbox 0 1
bcast.361093f1-de68-46c5-adff-d49ea8f164c0 0 1
bcast.a53632b0-c8b8-46d9-bd59-364afe9998c1 0 1
celeryev.c27b070d-b07e-4e37-9dca-dbb45d03fd54 0 1
celeryev.c66a9bed-84bd-40b0-8fe7-4e4d0c002866 0 1
celeryev.b490f71a-be1a-4cd8-ae17-06a713cc2a99 0 1
celeryev.9d023165-ab4a-42cb-86f8-90294b80bd1e 0 1
คอลัมน์แรกคือชื่อคิวที่สองคือจำนวนข้อความที่รออยู่ในคิวและที่สามคือจำนวนผู้ฟังสำหรับคิวนั้น คิวคือ:
งานการวิเคราะห์เป็นงานที่ดุร้ายที่ทำงานได้ดีบนชุดข้อมูลขนาดเล็ก แต่ตอนนี้ใช้เวลาประมวลผลนานกว่า 24 ชั่วโมง บางครั้งบางสิ่งบางอย่างจะผิดพลาดและจะติดขัดอยู่ในฐานข้อมูล มันจำเป็นต้องเขียนใหม่ แต่ก่อนหน้านั้นเมื่อมันติดฉันจะฆ่างานลบคิวและลองอีกครั้ง ฉันตรวจพบ "ความนิ่ง" โดยดูที่จำนวนข้อความสำหรับคิวการวิเคราะห์ซึ่งควรเป็น 0 (การวิเคราะห์ที่เสร็จสิ้น) หรือ 1 (กำลังรอการวิเคราะห์เมื่อคืนที่ผ่านมา) 2 ขึ้นไปไม่ดีและฉันได้รับอีเมล
celery purge
เสนอที่จะลบงานออกจากหนึ่งในคิวการออกอากาศและฉันไม่เห็นตัวเลือกให้เลือกคิวที่มีชื่ออื่น
นี่คือกระบวนการของฉัน:
$ sudo /etc/init.d/celeryd stop # Wait for analytics task to be last one, Ctrl-C
$ ps -ef | grep analytics # Get the PID of the worker, not the root PID reported by celery
$ sudo kill <PID>
$ sudo /etc/init.d/celeryd stop # Confim dead
$ python manage.py celery amqp queue.purge analytics
$ sudo rabbitmqctl list_queues -p celery name messages consumers # Confirm messages is 0
$ sudo /etc/init.d/celeryd start
celeryctl purge
ไม่ทำงานกับคิวที่มีชื่อ python manage.py celery amqp queue.purge <queue_name>
เคยทำ. ฉันคิดว่าบริบทมีประโยชน์สำหรับผู้ที่มีการตั้งค่าที่ซับซ้อนดังนั้นพวกเขาจึงสามารถรู้ได้ว่าต้องทำอะไรหากceleryctl purge
ล้มเหลว
manage.py
Celery 3.1.17 ไม่พบไฟล์ถูกลบหรือเพิ่งตีใหม่? ผมพบว่าสิ่งที่ดูเหมือนว่าอินเตอร์เฟซที่สอดคล้องกัน ( queue.purge
) ใน*/bin/amqp.py
แต่ แต่หลังจากพยายามเชื่อมโยงเนื้อหาของไฟล์กับเอกสารฉันต้องยอมรับอย่างน่าเสียใจว่า Celery ไม่มีเอกสารที่น่ารังเกียจและเป็นงานที่ซับซ้อนมากอย่างน้อยก็ตัดสินด้วยซอร์สโค้ดของมัน
manage.py
คือสคริปต์การจัดการ Django และmanage.py celery
เรียกใช้ขึ้นฉ่ายหลังจากโหลดการกำหนดค่าจากการตั้งค่า Django ฉันไม่ได้ใช้คื่นฉ่ายนอก Django แต่celery
คำสั่งที่รวมอยู่อาจเป็นสิ่งที่คุณกำลังมองหา: celery.readthedocs.org/en/latest/userguide/monitoring.html
ในคื่นฉ่าย 3+
http://docs.celeryproject.org/en/3.1/faq.html#how-do-i-purge-all-waiting-tasks
CLI
ล้างชื่อคิว:
celery -A proj amqp queue.purge <queue name>
ล้างคิวที่กำหนดค่า
celery -A proj purge
ฉันลบข้อความแล้ว แต่ยังมีข้อความเหลืออยู่ในคิว? คำตอบ: ยอมรับงาน (ลบออกจากคิว) ทันทีที่ดำเนินการจริง หลังจากที่ผู้ปฏิบัติงานได้รับงานแล้วจะใช้เวลาสักครู่จนกว่าจะมีการดำเนินการจริงโดยเฉพาะหากมีงานจำนวนมากรอการดำเนินการอยู่ ข้อความที่ไม่ได้รับการยอมรับจะถูกระงับไว้โดยผู้ปฏิบัติงานจนกว่าจะปิดการเชื่อมต่อกับนายหน้า (เซิร์ฟเวอร์ AMQP) เมื่อการเชื่อมต่อนั้นถูกปิด (เช่นเนื่องจากคนงานหยุดทำงาน) นายหน้าจะถูกส่งไปยังผู้ปฏิบัติงานถัดไปที่มีอยู่ (หรือคนงานเดียวกันเมื่อเริ่มต้นใหม่) เพื่อล้างคิวงานที่รออย่างเหมาะสม ต้องหยุดคนงานทั้งหมดแล้วกำจัดงานโดยใช้ celery.control.purge ()
ดังนั้นในการล้างคนงานคิวทั้งหมดจะต้องหยุด
หากคุณต้องการลบงานที่ค้างอยู่ทั้งหมดและงานที่กำลังดำเนินการและสำรองไว้เพื่อหยุดการขึ้นฉ่ายอย่างสมบูรณ์นี่คือสิ่งที่ฉันใช้งานได้:
from proj.celery import app
from celery.task.control import inspect, revoke
# remove pending tasks
app.control.purge()
# remove active tasks
i = inspect()
jobs = i.active()
for hostname in jobs:
tasks = jobs[hostname]
for task in tasks:
revoke(task['id'], terminate=True)
# remove reserved tasks
jobs = i.reserved()
for hostname in jobs:
tasks = jobs[hostname]
for task in tasks:
revoke(task['id'], terminate=True)
1. เพื่อล้างคิวงานที่รออย่างถูกต้องคุณต้องหยุดคนงานทั้งหมด ( http://celery.readthedocs.io/en/latest/faq.html#i-ve-purged-messages-but-there-are-) ภาพนิ่งข้อความที่ยังเหลือในคิว ):
$ sudo rabbitmqctl stop
หรือ (ในกรณี RabbitMQ / นายหน้าข้อความจัดการโดยหัวหน้างาน):
$ sudo supervisorctl stop all
2. ... จากนั้นล้างงานออกจากคิวเฉพาะ:
$ cd <source_dir>
$ celery amqp queue.purge <queue name>
3. เริ่ม RabbitMQ:
$ sudo rabbitmqctl start
หรือ (ในกรณี RabbitMQ ได้รับการจัดการโดยหัวหน้างาน):
$ sudo supervisorctl start all
คำสั่งcelery 4+ celery purge เพื่อล้างคิวงานที่กำหนดค่าไว้ทั้งหมด
celery -A *APPNAME* purge
โปรแกรม:
from proj.celery import app
app.control.purge()
งานที่ค้างอยู่ทั้งหมดจะถูกลบทิ้ง อ้างอิง: celerydoc
manage.py celery purge
(celeryctl
เลิกใช้แล้วและจะหายไปใน 3.1)