2020年1月24日金曜日

Сколько данных может обрабатываться в секунду средой Python Sanic?







 Вы можете сказать, посмотрев на страницу. Это 283 645 в секунду в сериализации JSON.

Однако это число имеет мало практического значения.

Во-первых, типичный веб-сервер выполняет такие процессы, как аутентификация пользователя, доступ к базе данных и создание HTML, поэтому время обработки намного больше. Это просто означает, что время обработки Sanic ничтожно мало.

Также не так много случаев, когда веб-приложению требуется более 1000 процессов в секунду. Во-первых, веб-сервер, такой как Niginx, может обрабатывать и кэшировать статические файлы. Если вы это сделаете, маловероятно, что внутренняя система вашей компании с 10 000 сотрудников будет обрабатывать 1000 рабочих мест в секунду.

Даже сейчас Dgango и Flask используются в основном потому, что их обычно достаточно во многих случаях. Если есть проблема, я думаю, что лучше использовать язык Go, который работает быстрее и имеет больше функций параллельной обработки, чем Sanic в Python. Обратите внимание, что это не означает, что Sanic не используется, но если число процессов в секунду становится очень большим, сам Python часто не подходит для этого процесса. ,
Просмотров : 80 раз · По запросу Масахиро Ишизука
Высокая оценка
доля



Рекомендуемый порядок
Все

Спасибо за ваш ответ.
> В общем, часто лучше использовать язык Go, который работает быстрее и имеет больше функций параллельной обработки, чем Sanic в Python.

Я вижу вместе


резюме

  •  GIL гарантирует, что многопоточность не выигрывает от многоядерности.

Если этот блог прав, и мы рассматриваем его вместе, Python - это язык программирования, который не использует преимущества многоядерных процессоров. Если вам не нужны AI (искусственный интеллект) или библиотеки машинного обучения, Go lang лучше, чем Python, но если AI (искусственный интеллект) и библиотеки машинного обучения богаты Go Go, Python Мы надеемся, что в будущем будет решена либо платформа, либо формальная поддержка многоядерных процессоров. Существует также библиотека искусственного интеллекта, машинного обучения и численного анализа, разработанная Google под названием TensorFlow for Go lang . Этот API можно использовать в Go lang, но все еще только Python может создавать и изучать модели, поэтому я надеюсь, что он будет улучшен в будущем.
ответить


С точки зрения GIL это обычно не проблема, потому что тяжелая обработка может быть устранена путем написания ее на C / C ++ или использования библиотеки, написанной на C / C ++. Однако, если число операций в секунду становится очень большим, невозможно избежать коллизий при обработке и Python становится неэффективным. Поэтому я рекомендую использовать только Go. Если он небольшой, то разработка с использованием только Python не является проблемой. Для больших масштабов может потребоваться рассчитать и проверить, выдерживает ли это только Python.

Что касается машинного обучения, обучение использует много данных, чтобы сделать много вычислений. В этом отношении Python хорош в Go и не хорош в Go, поэтому Go никогда не сможет создавать и изучать модели машинного обучения.

С другой стороны, в процессе, использующем изученный результат, вычисление является легким, потому что используется только результат. Если вам приходится иметь дело с большим количеством обработки здесь, есть API для Go, потому что Go больше подходит по причинам, указанным выше.

И TesorFlow, и Go были разработаны Google, но это результат рассмотрения характеристик Python и Go, поэтому лучше думать, что он не будет унифицирован.
ответить
Высокая оценка

Показать вопрос
Представление респондентов

1 подписчик, которого вы знаетеТакео Ямазаки

Работал фрилансером с 2013 года по настоящее время

Специальность по науке в Киотском университете

0–0 кто жил в Токусиме

Просмотрено: 344.6k раз В этом месяце: 26.9k раз
Активен в 1 пространстве

ー ー ー
Является ли Python 4 действительно многоядерным и многопоточным совместимым?
Комментарии:
Это проверка чтения блога Python3.
Может быть,
В Python2 & 3 подтверждается, что он отличается от настоящих многоядерных и многопоточных программ, таких как JAVA или Go lang (язык Go), потому что это поддельные многоядерные и многопоточные.

Действительно многоядерная и многопоточная поддержка с uvloop?
Это можно сказать.
Генеральный директор Масахиро Ишизука
тел: 042-559-8638
iPhone: 070-3861-5011

Узнайте, почему Asyncio использует потоки POSIX
  

Была акция.

Токибито-сенсей ( id: nullpobug ) вызвал в офис, чтобы поиграть, и мы пошли к открытому коллекционеру. Я поговорил с мистером Аодагом ( id: aodag ), но я вспомнил, о чем беспокоился раньше.

Я волновалась

При подготовке презентации для учебной сессии я подготовил пример кода, который отправляет HTTP-запрос на сервер, используя asyncio и aiohttp.
  импортировать aiohttp
 импортировать asyncio

 async def fetch (l, url):
     async с aiohttp.ClientSession (loop = l) в качестве сеанса:
         async с session.get (url) в качестве ответа:
             возвращение ожидание response.text ()


 async def main (l, url, num):
     tasks = [fetch (l, url) для _ в диапазоне (num)]
     возврат await asyncio.gather (* задачи)


 если __name__ == '__main__' :
     loop = asyncio.get_event_loop ()
     results = loop.run_until_complete (main (loop, 'http: // localhost: 8000' , 3 ))
     для r в результатах:
         печатать (r)
PyCharm имеет функцию для отображения «диаграммы параллелизма», и вы можете проверить движение потоков и процессов. Поведение потоков при выполнении этого кода выглядит следующим образом.
f: id: nwpct1: 20170330234242p: обычный
По какой-то причине появляется concurrent.futures.ThreadPoolExecutor . Я попытался выяснить, что было написано в документе, но так как я не смог найти таких описаний, я сдался и спросил Аодага и Токибито.

socket.getaddrinfo

Он нашел причину в десятки минут. socket.getaddrinfo выполняется синхронно, socket.getaddrinfo что реализация cpython не выполняет это асинхронно, а выполняет concurrent.futures.ThreadPoolExecutor нескольких потоках.
Образец с использованием aioredis был подготовлен как образец кода, в котором getaddrinfo не использовался. Подключитесь к локально созданному серверу Redis с сокетом домена UNIX .
  импортировать asyncio
 импортные

 async def connection_example (ключ):
     conn = await aioredis.create_connection ( '/tmp/redis.sock' )
     return await conn.execute ( «GET» , ключ)


 async def main (num):
     tasks = [connection_example ( 'my-key' ) для _ в диапазоне (num)]
     возврат await asyncio.gather (* задачи)


 если __name__ == '__main__' :
     loop = asyncio.get_event_loop ()
     результаты = loop.run_until_complete (main ( 3 ))
     для r в результатах:
         печатать (r)
Кстати, конфиг redis - это ↓.
  демонизировать нет
 pidfile /var/run/redis.pid
 unixsocket /tmp/redis.sock
 unixsocketperm 700
 файл журнала ""
 базы данных 1 
Глядя на диаграмму параллелизма в это время,
f: id: nwpct1: 20170331163806p: обычный
Конечно, никакие темы не были созданы.
Доступ к внешнему серверу Redis
С другой стороны, если вы подготовите сервер Redis снаружи и подключите его (на этот раз я использовал arukas.io ),
  импортировать asyncio
 импортные

 async def connection_example (ключ):
     conn = await aioredis.create_connection (
         ( «seaof-xxx-xxx.arukascloud.io» , 311390 ),
         db = 0 , пароль = 'xxxxxxxxxxxxxxx' )
     return await conn.execute ( «GET» , ключ)


 async def main (num):
     tasks = [connection_example ( 'my-key' ) для _ в диапазоне (num)]
     возврат await asyncio.gather (* задачи)


 если __name__ == '__main__' :
     loop = asyncio.get_event_loop ()
     результаты = loop.run_until_complete (main ( 3 ))
     для r в результатах:
         печатать (r)
Когда выполняется, это происходит следующим образом.
f: id: nwpct1: 20170331163620p: обычный
Кажется, что рабочий поток создан в конце концов.

Сколько рабочих потоков создано для ThreadPoolExecutor?

Диаграмма параллелизма, когда количество одновременных выполнений в семафоре ограничено 3, выглядит следующим образом.
f: id: nwpct1: 20170331164208p: обычный
Очевидно, Thread в ThreadPoolExecutor не используется повторно. Степень, до которой это было создано, была описана в документации под ThreadPoolExecutor.
Если max_workers равен None или не указан, значением по умолчанию является количество процессоров на машине, умноженное на 5.
17.4 Concurrent.futures - параллельное выполнение задачи - документация Python 3.6.1
Я отправил около 30 запросов на пробную версию (семафор 3).
f: id: nwpct1: 20170331164432p: обычный
Было создано до 20, и было подтверждено, что они были повторно использованы после этого. Хотя верхний предел рабочего потока не может быть изменен из-за реализации, маловероятно, что возникнут какие-либо проблемы.

uvloop

Что касается uvloop, было подтверждено, что они усердно работали без использования потоков POSIX .
  импорт uvloop

 # Опущено
 loop = uvloop.new_event_loop ()
 asyncio.set_event_loop (цикл)
Когда выполнено,
f: id: nwpct1: 20170330232815p: обычный
Ох, правда.

в заключении

Аодаг-сенсей и Токибито-сенсей потрясающие ... Я читал и оставлял документ влажным, но мне потребовалось десять минут, чтобы найти причину и сказать мне. Я также являюсь членом общества с завтрашнего дня, поэтому я буду усердно работать для двух человек.
Открытый коллекционер с мистером Аодагом и мистером Токибито, похоже, набирает на работу. Спасибо







0 コメント:

コメントを投稿