2011-02-25 1 views
4

Peut-être qu'il me manque quelque chose d'évident (et c'est un vendredi), mais est-il possible de faire l'équivalent d'un os.fork() sur un greenlet? Je ne cherche pas nécessairement à bifurquer le processus, je cherche à prendre le greenlet et exécuter un ensemble de code, puis un autre, mais avec des étendues indépendantes (comme avec os.fork()).Forklet Greenlets

Des idées ou devrais-je juste dormir?

+0

Ce serait génial si c'était possible. Ce n'est peut-être même pas si difficile du point de vue des systèmes: vous pouvez simplement copier les 'locals()' de chaque cadre de pile. – amwinter

Répondre

4

Afin de conceptualiser un greenlet, créez simplement un autre greenlet enveloppant votre "fonction enfant". Je recommande également fortement gevent, qui est construit sur greenlet. Le code gevent a une méthode fork(), mais il forke le processus Python, puis redémarre gevent dans l'enfant. Je parie que vous pouvez implémenter tout ce que vous faites dans gevent avec un code plus lisible que greenlet.

+1

oh jésus c'est magnifique. – mattbasta