2012-09-20 11 views
12

डिबगिंग उद्देश्यों के लिए, मैं सभी ग्रीनलेट्स पर फिर से शुरू करना चाहता हूं और उनके ट्रेस निशान प्राप्त करना चाहता हूं - मैं इसे gevent के साथ कैसे कर सकता हूं?गीवेंट में, मैं सभी चल रहे ग्रीनलेट्स के स्टैक निशान कैसे डंप कर सकता हूं?

असल में, मैं this के gevent समकक्ष करना चाहता हूं।

उत्तर

16

आप gc मॉड्यूल का उपयोग ढेर पर सभी वस्तुओं के माध्यम से फिर से करने और हरितलेट की खोज के लिए कर सकते हैं। ग्रीनलेट्स स्टैक निशान को एक विशेषता gr_frame के रूप में स्टोर करते हैं।

import gc 
import traceback 
from greenlet import greenlet 

for ob in gc.get_objects(): 
    if not isinstance(ob, greenlet): 
     continue 
    if not ob: 
     continue 
    log.error(''.join(traceback.format_stack(ob.gr_frame))) 
संबंधित मुद्दे