Является ли greenthread равным «реальной» нити

Я взял пример кода из Unterstanding eventlet.wsgi.server .

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) 

Когда я обращаюсь к веб-серверу с помощью различных IP-адресов клиента, я вижу, что они обрабатываются параллельно. И с печатью в hello_world я также могу обработать их в двух разных greenthreads, но в том же потоке ОС.

Я новичок в Python. Мне любопытно, что если каждый greenthread связывается с базовым потоком ОС?

    One Solution collect form web for “Является ли greenthread равным «реальной» нити”

    Каждая зеленая нить привязана к одному потоку Python, который привязан к одному потоку ОС. Теоретически, Eventlet может распространять зеленые потоки по нескольким потокам Python и, следовательно, потокам ОС, но это очень много работает для очень мало пользы, поскольку код Python не выполняется параллельно на CPython [1].

    Правило большого пальца: если вы хотите использовать несколько ядер, выбрать другой язык с Python лучше всего запустить несколько процессов. Быстрый способ – multiprocessing [2] (в stdlib начиная с версии 2.6), надежным способом является os.fork [3] [4] вручную.

    Просто небольшое разъяснение терминологии: для большинства популярных операционных систем единственный способ параллельного выполнения кода – иметь несколько потоков ОС. Строго говоря, ваши запросы обрабатываются не параллельно, а одновременно; именно потому, что есть только один поток ОС. В любой момент времени существует только один зеленый поток, выполняющий некоторый код. Кстати, одно и то же ограничение относится к регулярным потокам Python, поэтому Eventlet (или другие библиотеки зеленого потока) в основном просто работают в качестве замены, и (в основном) не вызывают никаких новых необычных ошибок.

    Вы можете найти этот ответ полезным: 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

    Python - лучший язык программирования в мире.