Celery: احصل على معرف مهمة الكرفس قبل استدعاء "تأخير"

تم إنشاؤها على ٢٢ يناير ٢٠١٤  ·  3تعليقات  ·  مصدر: celery/celery

في تطبيقي ، أستخدم جدولًا لتتبع وتخزين معلومات إضافية للمهام التي تم إطلاقها (أطلق عليها اسم جدول مهام التطبيق). في بعض الحالات ، أحتاج إلى معرف سجل مهمة التطبيق الذي تم إنشاؤه في مهمة الكرفس الفعلية. تكمن المشكلة في أنه لا يتم إنشاء سجل مهمة التطبيق هذا إلا بمجرد بدء المهمة (لأن معرف مهمة الكرفس جزء من سجل معرف مهمة التطبيق) وأنه سيكون من الصعب تمرير معرف المهمة إلى مهمة قيد التشغيل.

في الأساس ، أحتاج إلى معرف مهمة الكرفس لإنشاء سجل مهام التطبيق ، وأحتاج إلى معرف مهمة التطبيق لإنشاء مهمة الكرفس.

هل هناك أي طريقة قوية لحل مشكلة الدجاج والبيض؟ إحدى الطرق التي يمكنني التفكير فيها هي إيقاف التنفيذ بطريقة ما حتى أنشأت سجل مهمة التطبيق (في المتصل task_function.delay() ) ، لكن لا يمكنني التفكير في طريقة للقيام بذلك باستخدام الكرفس خارج الصندوق أو كيفية تمرير معرف مهمة التطبيق إلى المهمة.

أي أفكار ، مؤشرات ، تلميحات حول ذلك؟ - شكرا جزيلا!

التعليق الأكثر فائدة

يمكنك إنهاء كائنات التوقيع عن طريق تجميدها:

>>> sig = add.s(2, 2)
>>> sig.freeze()
<AsyncResult: e89ff8f1-a556-4bb7-8b9e-5db9806ca082>
>>> sig.delay()
<AsyncResult: e89ff8f1-a556-4bb7-8b9e-5db9806ca082>

>>> sig = group(add.s(i, i) for i in range(5))
>>> sig.freeze()
<GroupResult: 9b4a8bf0-2f81-43fe-a5a0-23563441b25d [6eb971bc-ad3b-4f8f-9724-5b2baa493369, 2390bada-76f7-4680-8013-e9da78bf6a68, c5c510c1-80ed-49bc-aaaa-7ddbd5d025d2, 9be6363e-7290-407b-8c54-d6baf90d99d6, 35502fc1-9ce9-44df-917b-a6026daed646]>
>>> sig.delay()
<GroupResult: 9b4a8bf0-2f81-43fe-a5a0-23563441b25d [6eb971bc-ad3b-4f8f-9724-5b2baa493369, 2390bada-76f7-4680-8013-e9da78bf6a68, c5c510c1-80ed-49bc-aaaa-7ddbd5d025d2, 9be6363e-7290-407b-8c54-d6baf90d99d6, 35502fc1-9ce9-44df-917b-a6026daed646]>

يمكنك تحديد المعرف لأي مهمة:

 >>> from celery import uuid
 >>> task_id = uuid()
 >>> task_id
'c7f388e9-d688-4f1d-be22-fb043b93c725'
 >>> add.apply_async((2, 2), task_id=task_id)
 <AsyncResult: c7f388e9-d688-4f1d-be22-fb043b93c725>

للقيام بشيء ما عند استدعاء مهمة ما ، يمكنك استخدام before_task_publish أو
إشارات after_task_publish (انظر أساسيات الإشارة )

ال 3 كومينتر

يمكنك إنهاء كائنات التوقيع عن طريق تجميدها:

>>> sig = add.s(2, 2)
>>> sig.freeze()
<AsyncResult: e89ff8f1-a556-4bb7-8b9e-5db9806ca082>
>>> sig.delay()
<AsyncResult: e89ff8f1-a556-4bb7-8b9e-5db9806ca082>

>>> sig = group(add.s(i, i) for i in range(5))
>>> sig.freeze()
<GroupResult: 9b4a8bf0-2f81-43fe-a5a0-23563441b25d [6eb971bc-ad3b-4f8f-9724-5b2baa493369, 2390bada-76f7-4680-8013-e9da78bf6a68, c5c510c1-80ed-49bc-aaaa-7ddbd5d025d2, 9be6363e-7290-407b-8c54-d6baf90d99d6, 35502fc1-9ce9-44df-917b-a6026daed646]>
>>> sig.delay()
<GroupResult: 9b4a8bf0-2f81-43fe-a5a0-23563441b25d [6eb971bc-ad3b-4f8f-9724-5b2baa493369, 2390bada-76f7-4680-8013-e9da78bf6a68, c5c510c1-80ed-49bc-aaaa-7ddbd5d025d2, 9be6363e-7290-407b-8c54-d6baf90d99d6, 35502fc1-9ce9-44df-917b-a6026daed646]>

يمكنك تحديد المعرف لأي مهمة:

 >>> from celery import uuid
 >>> task_id = uuid()
 >>> task_id
'c7f388e9-d688-4f1d-be22-fb043b93c725'
 >>> add.apply_async((2, 2), task_id=task_id)
 <AsyncResult: c7f388e9-d688-4f1d-be22-fb043b93c725>

للقيام بشيء ما عند استدعاء مهمة ما ، يمكنك استخدام before_task_publish أو
إشارات after_task_publish (انظر أساسيات الإشارة )

شكرا جزيلا. ذهبت مع الخيار task_id = uuid() . أنه يعمل مثل السحر!

أعلم أن هذا قديم ، لكن كان من الرائع أن أرى أنني لست الوحيد الذي لديه حالة استخدام مثل هذه - ومن الرائع أيضًا أن نرى أن الكرفس يدعم العديد من الحلول (الجيدة). تصميم مكتبة رائع.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات