/ / गीवेंट में चल रहे ग्रीनलेट की कुल संख्या प्राप्त करें? - अजगर, भूगर्भ

Gevent में चल रहे ग्रीनलेट की कुल संख्या प्राप्त करें? - अजगर, gevent

क्या वर्तमान गीवेंट प्रक्रिया, और उनमें से राज्य में ग्रीनलेट की संख्या को क्वेरी करने का एक तरीका है?

उदाहरण के लिए, मैं मध्यस्थता वाली ग्रीनलेट्स के साथ मध्यस्थ वेबसाइटों को क्रॉल करना चाहता हूं, फिर मैं क्वेरी के लिए एक और ग्रीनलेट चलाता हूं कि कितने चल रहे हैं कितने समाप्त / अपवाद हैं।

या क्या मुझे काउंटर के रूप में एक वैश्विक चर सेट करना चाहिए? क्या Gvent में बिल्ट-इन जैसा कुछ है?

उत्तर:

उत्तर № 1 के लिए 6

Gevent doesn "टी ऐसा कुछ है। लेकिन आप उपयोग कर सकते हैं bool(g), g.ready() तथा g.successful() इसकी स्थिति की जाँच करने के लिए। मैं इस तरह से ग्रीनलेट्स की स्थिति का सर्वेक्षण करूंगा

import gevent
import random

def _get_status(greenlets):
total = 0
running = 0
completed = 0
successed = 0
yet_to_run = 0
failed = 0

for g in greenlets:
total += 1
if bool(g):
running += 1
else:
if g.ready():
completed += 1
if g.successful():
successed += 1
else:
failed += 1
else:
yet_to_run += 1

assert yet_to_run == total - completed - running
assert failed == completed - successed

return dict(total=total,
running=running,
completed=completed,
successed=successed,
yet_to_run=yet_to_run,
failed=failed)

def get_greenlet_status(greenlets):
while True:
status = _get_status(greenlets)
print status
if status["total"] == status["completed"]:
return
gevent.sleep(5)

def crawl(url):
r = random.randint(0, 10)
gevent.sleep(r)

err = random.randint(0, 4)
if err == 0:
raise Exception

greenlets = [gevent.spawn(crawl, each) for each in xrange(100)]

get_greenlet_status(greenlets)