1

我目前正在开发一个应用程序,其中客户端对 Web 服务进行一些调用,对返回的 JSON 数据进行少量处理,然后将其存储在数据库中。我目前正在使用请求和 SQLAlchemy。处理量非常小(只是将数据更改为更具相关性的格式)。我没有使用 SA 的 ORM。我只是使用引擎+交易。

我想知道异步执行此操作的好模式是什么(请求返回-> 移交给数据库-> 下一个请求开始而不等待数据库完成事务)。

我知道 Python 中有许多可用的工具(多处理、线程、协程、异步等)。但是,我很难为我的用例找到一个好的教程。

我想知道是否有人有可以帮助我解决这个问题的建议、我应该查看的库或异步模式。

谢谢。

4

1 回答 1

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)
于 2013-04-30T08:26:49.767 回答