istisnası var ise görevler argümanlarını al, Celery ve Python ile çalışmaya başladım ve muhtemelen çok basit bir soru var, ama etrafta uygun bir cevabı bulamıyorum.Python kereviz:
Bir sürü görevim varsa ve bunlardan biri atarsa, bir istisna, bu göreve gönderilen argümanları geri almanın bir yolu var mı? Bir istisna atabilir Örneğin
, bazı hostnames çözümlemek IP'leri almak istiyorum, ve bir görev oluşturmak eğer ...
@tasks_app.task
def resolve_hostname(hostname):
return (hostname, {hst.address for hst in dns.resolver.query(hostname)})
... almanın bir yolu var Bu Özel Durum gerçekleştiğinde, aramanın dışındaki hostname
bağımsız değişkeninin değeri nedir? Bir istisna yükseltecektir (failure.kommm
çözümlemeye çalışır)
ip_subtasks = group(
resolve_hostname.s(hostname) for hostname in ['google.com',
'yahoo.com',
'failure.kommm']
)()
sonuncusu:
ı grubu gibi görevleri diyelim. Bentry/catch
içine kereviz görevin
get()
yöntemini koymak ister ve (aşağıda gösterildiği gibi bir şey) bir
şey failure.kommm çözümlemeye çalışırken ters gitti diyerek mesajı gösterirdim:
Yani
for ip_subtask in ip_subtasks:
try:
hostname, ips = ip_subtask.get(timeout=45)
except dns.exception.DNSException, e:
# I WISHED THIS WORKED:
logger.exception("Something happened when trying"
" to resolve %s" % ip_subtask.args[0])
, Bu soru ... Görev örneğinin kendisindeyim, bir görevin yürütüldüğü argümanları geri almanın bir yolu var mı?
Önceden teşekkür ederiz.
bir 'on_failure' işleyicisi baktınız mı? http://celery.readthedocs.org/en/latest/userguide/tasks.html#on_failure – Ngenator
Elimde var ve bence işe yarayacak, ancak görev bir dekoratör yukarıda gösterildiği gibi (dediğim gibi, Celery'la yeni başlayan biriyim) – BorrajaX
Yukarıdaki işleyicilere göz atın, bunu sadece soyut bir sınıfla nasıl yapacağınızı gösterir. – Ngenator