Делает ли крутилка, циклон или торнадо многоядерность SMP из коробки

Я хотел бы использовать любой из трех упомянутых неблокирующих серверов на сервере AWS Linux с 8 ядрами. Ни в одной документации не ясно, реализован ли SMP под обложками в соответствующем приветственном мире или любых других примерах.

Например, в этом cyclone helloworld ничего не говорится о ядрах, SMP или потоках на ядро.

import cyclone.web

class MainHandler(cyclone.web.RequestHandler):
    def get(self):
        self.write("Hello, world")


class Application(cyclone.web.Application):
    def __init__(self):
        cyclone.web.Application.__init__(self, [(r"/", MainHandler)],
                                         xheaders=False)

Или этот Twisted:

from twisted.web import server, resource
from twisted.internet import reactor
class HelloResource(resource.Resource):
    isLeaf = True
    numberRequests = 0

    def render_GET(self, request):
        self.numberRequests += 1
        request.setHeader("content-type", "text/plain")
        return "I am request #" + str(self.numberRequests) + "\n"

reactor.listenTCP(8080, server.Site(HelloResource()))
reactor.run()

Или торнадо...

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

application = tornado.web.Application([
    (r"/", MainHandler),
])
if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

На самом деле, трудно определить, являются ли они неблокирующими или нет.


person Gabe Rainbow    schedule 08.01.2014    source источник
comment
stackoverflow.com/questions/10077745/ связано.   -  person Jean-Paul Calderone    schedule 08.01.2014


Ответы (2)


HTTPServer Tornado поддерживает многопроцессорный режим с использованием методов bind(port) и start(num_procs).
http://www.tornadoweb.org/en/stable/tcpserver.html#tornado.tcpserver.TCPServer.start

person Ben Darnell    schedule 08.01.2014
comment
автоматически. Если num_processes имеет значение None или ‹= 0, мы определяем количество ядер, доступных на этой машине, и разветвляем это количество дочерних процессов. - person Gabe Rainbow; 08.01.2014
comment
Да, но обратите внимание, что значение по умолчанию для num_processes равно 1. Приложения должны выбрать многопроцессорный режим. - person Ben Darnell; 08.01.2014
comment
черт. только что обратил внимание на мелкий шрифт. спасибо - person Gabe Rainbow; 08.01.2014
comment
(1) могут ли это быть разные потоки, а не процессы, чтобы мы могли сэкономить память? (2) Как мы можем использовать X ядер и указать, что каждый веб-сокет будет обрабатываться одним ядром? - person Nathan B; 12.03.2018
comment
Пожалуйста, не задавайте новые вопросы в комментариях к очень старому вопросу. Задавайте свои вопросы как новые вопросы. - person Ben Darnell; 12.03.2018

Процесс CPython использует глобальную блокировку интерпретатора и, таким образом, не может использовать реальные преимущества нескольких потоков, доступных на оборудовании, если выполняется только один процесс Python.

person Eric Urban    schedule 08.01.2014
comment
Вот почему некоторые, если не все процессы форка, либо неявно, либо нужно явно добавить его. - person Gabe Rainbow; 08.01.2014