2013-03-08 34 views
5

için bir greenthread eşittir Unterstanding eventlet.wsgi.server örnek kod aldım.Bir "gerçek" iş parçacığı

from eventlet import wsgi 
import eventlet 
from eventlet.green import time 
import threading 

def hello_world(env, start_response): 
    print "got request", eventlet.greenthread.getcurrent(), threading.currentThread() 
    time.sleep(10) 
    start_response('200 OK', [('Content-Type', 'text/plain')]) 
    return ['Hello, World!\n'] 

wsgi.server(eventlet.listen(('', 8090)), hello_world) 

Web sunucusuna farklı istemci ip adresleri üzerinden eriştiğimde, bunların paralel olarak işlendiğini görebiliyorum. Ve hello_world numaralı baskıda, aynı iki iş parçacığında, ancak aynı işletim sistemi iş parçacığında işlenebildim.

Python’da yeni. Her bir greenthread temel bir işletim sistemi iş parçacığıyla bağlanırsa merak ediyorum.

+0

Yeşil ipler herhangi bir yerel güvenmeyin İşletim sistemi yetenekleri ve bunlar, çekirdek alanı yerine kullanıcı alanında yönetiliyor – Chipmunk

cevap

5

Her yeşil iş parçacığı, tam olarak bir işletim sistemi iş parçacığına bağlı olan bir Python iş parçacığına bağlanır. Teoride, Eventlet birkaç Python iş parçacığı ve dolayısıyla OS iş parçacıklarında yeşil iş parçacıkları dağıtabilir, ancak Python kodu Python kodu CPython [1] 'da paralel olarak yürütülmediğinden çok az fayda sağlar.

Kural: birden çok çekirdek kullanmak istiyorsanız,Python ile başka bir dil seçin en iyi seçim birkaç işlemi çalıştırmaktır. Hızlı yol multiprocessing [2] (2.6'dan beri stdlib'de), sağlam yol os.fork [3] [4] elle. terminolojiye

Sadece küçük bir açıklama: en popüler işletim sistemleri için , paralel kodu çalıştırmak için tek yol birden OS konuları sahip olmaktır. Kesin olarak, istekleriniz paralel değil, aynı anda işlenir; Tam olarak sadece bir işletim sistemi iş parçacığı olduğu için. Herhangi bir zamanda, belirli bir anda, bazı kodları yürüten sadece bir yeşil iplik vardır. Bu arada, aynı kısıtlama normal Python iş parçacıkları için de geçerlidir; bu nedenle, Eventlet (veya diğer yeşil iş parçacıkları kitaplıkları) çoğunlukla yalnızca drop-in değiştirme olarak çalışır ve (çoğunlukla) herhangi bir yeni olağandışı hataya neden olmaz.

Sen kullanışlı bu yanıt bulabilirsiniz

: https://stackoverflow.com/posts/14227272/revisions

[1] http://wiki.python.org/moin/GlobalInterpreterLock
[2] http://docs.python.org/2/library/multiprocessing.html
[3] http://docs.python.org/2/library/os.html#os.fork
[4] https://github.com/jonashaag/bjoern/blob/master/tests/fork.py

İlgili konular