Похоже, что этот ответ может помочь:
Подводя итог, вы можете нам _in
, например, так: [ 115]
session.query(MyUserClass)
.filter(MyUserClass.id.in_(SOME_LIST)).all()
Используйте асинхронный http-клиент, который использует асинхронный чат и asyncore. http://sourceforge.net/projects/asynchttp/files/asynchttp-production/asynchttp.py-1.0/asynchttp.py/ загрузить
Одна опция состояла бы в том, чтобы отправить работу на какую-то очередь (Вы могли использовать что-то Enterprisey как ActiveMQ с pyactivemq или ТОПАТЬ как коннектор, или Вы могли использовать что-то легкое как пустельга, которая записана в Scala и говорит тот же protocl как кэш-память, таким образом, можно просто использовать клиент кэш-памяти Python, чтобы говорить с ним).
После того как Вам настраивали механизм организации очередей, можно создать как многие или как немного задач рабочего, которые подписаны на очередь и делают фактическую работу загрузки, как Вы хотите. Вы можете даже сделать, чтобы они жили на других машинах, таким образом, они не вмешиваются в скорость обслуживания yourwebsite вообще. Когда рабочие сделаны, они отправляют результаты назад на базу данных или другую очередь, где веб-сервер может взять их.
Если Вы не хотите должными быть справляться с внешними рабочими процессами затем, Вы могли бы сделать потоки рабочих в том же процессе Python, который выполняет веб-сервер, но затем очевидно, он будет иметь больший потенциал для влияния на выполнение обслуживания веб-страницы.
Я просто создал бы сервис в скрученном, который сделал ту параллельную выборку и анализ и доступ это от web.py как простой запрос HTTP.
Я не уверен, что понимаю Ваш вопрос, таким образом, я дам несколько частичных ответов для запуска с.
Вроде ответа MarkusQ MochiKit является хорошей библиотекой JavaScript с устойчивыми асинхронными методами, вдохновленными Скрученным.
Я не знаю, будет ли это точно работать, но похоже, что это могло бы: EvServer: Python Асинхронный Сервер WSGI имеет интерфейс web.py и может сделать нажатие стиля кометы клиенту браузера.
Если это не правильно, возможно, можно использовать Согласие клиент HTTP для асинхронной загрузки страниц и выяснить, как служить им браузеру через ajax или комету.
На самом деле можно интегрироваться скрученный с web.py. Я не действительно уверен как, поскольку я только сделал это с django (используемый скрученный с ним).
Вы можете использовать urllib
для загрузки файлов и очереди
] для управления несколькими рабочими потоками. например:
import urllib
from threading import Thread
from Queue import Queue
NUM_WORKERS = 20
class Dnld:
def __init__(self):
self.Q = Queue()
for i in xrange(NUM_WORKERS):
t = Thread(target=self.worker)
t.setDaemon(True)
t.start()
def worker(self):
while 1:
url, Q = self.Q.get()
try:
f = urllib.urlopen(url)
Q.put(('ok', url, f.read()))
f.close()
except Exception, e:
Q.put(('error', url, e))
try: f.close() # clean up
except: pass
def download_urls(self, L):
Q = Queue() # Create a second queue so the worker
# threads can send the data back again
for url in L:
# Add the URLs in `L` to be downloaded asynchronously
self.Q.put((url, Q))
rtn = []
for i in xrange(len(L)):
# Get the data as it arrives, raising
# any exceptions if they occur
status, url, data = Q.get()
if status == 'ok':
rtn.append((url, data))
else:
raise data
return rtn
inst = Dnld()
for url, data in inst.download_urls(['http://www.google.com']*2):
print url, data