Nano Hash - криптовалюты, майнинг, программирование

SQLAlchemy + запросы асинхронного шаблона

В настоящее время я работаю над приложением, в котором клиент делает некоторый вызов веб-сервисам, выполняется небольшая обработка возвращаемых данных JSON, а затем они сохраняются в базе данных. В настоящее время я использую запросы и SQLAlchemy. Объем обработки очень мал (просто изменение данных в более реляционном формате). Я не использую ORM для SA. Я просто использую движок + транзакции.

Мне было интересно, какой хороший шаблон для асинхронного выполнения будет (запрос возвращен -> передан в базу данных -> следующий запрос начинается, не дожидаясь завершения транзакции БД).

Я знаю, что в Python есть ряд инструментов (многопроцессорность, потоки, сопрограммы, асинхронный процессор и т. д.). Однако мне трудно найти хороший учебник для моего варианта использования.

Мне было интересно, есть ли у кого-нибудь предложения, библиотеки, на которые я должен обратить внимание, или асинхронные шаблоны, которые помогли бы мне решить эту проблему.

Спасибо.

30.04.2013

  • Насколько я могу судить, это то, что база данных делает сама по себе. SQLAlchemy просто держит открытым пул подключений и использует их при работе с базой данных. 30.04.2013
  • Таким образом, независимо от того, насколько велика транзакция (могут быть тысячи вставок), SA позволит потоку перейти к следующему запросу? 30.04.2013

Ответы:


1

Вы можете поместить каждый запрос в очередь и позволить набору исполнителей потоки обрабатывают каждый из них и отправляют их в БД .

Вот простой пример рабочего тела:

import threading
import time
from Queue import Queue, Empty
from random import choice

class worker(threading.Thread):
  def __init__(self):
    threading.Thread.__init__(self)
    self.q = Queue()
  def run(self):
    while True:
      try:
        r = self.q.get_nowait()
      except Empty:
        r = None
      if r is None:
        time.sleep(1.0)
        continue
      # do something with 'r'
      print '%s: Handled  request %s' % (self, r)
  def push(self, r):
    self.q.put(r)

workers = [worker() for i in range(5)]
for w in workers:
  w.start()

Затем распределите запросы по воркерам следующим образом:

choice(workers).push(req)
30.04.2013
  • Спасибо. Это было полезно. Я также хочу добавить, что: nryoung.org/blog/2013/ 28.02/python-threading была полезная статья, которую я нашел сегодня утром. 30.04.2013
  • Это наиболее распространенный подход для вашего варианта использования. Кроме того, рассмотрите возможность принятия моего ответа, если это то, что вы искали. 01.05.2013
  • похоже ссылка утеряна. его куда-то перенесли? 19.04.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..