Я пытаюсь создать то, что я называю scrobbler. Задача состоит в том, чтобы прочитать пользователя Delicious из очереди, извлечь все свои закладки и поместить их в очередь закладок. Затем что-то должно пройти через эту очередь, выполнить синтаксический анализ и затем сохранить данные в базе данных.Threading в приложении django
Это, очевидно, требует потоковой обработки, потому что большую часть времени тратится на ожидание ответа Delicious, а затем за закладными веб-сайтами, которые отвечают и передаются через некоторые API, и было бы глупо, если бы все дождалось этого.
Однако у меня возникают проблемы с потоковой обработкой и возникают странные ошибки, такие как таблицы базы данных, которые не определены. Любая помощь приветствуется :)
Вот соответствующий код:
# relevant model #
class Bookmark(models.Model):
account = models.ForeignKey(Delicious)
url = models.CharField(max_length=4096)
tags = models.TextField()
hash = models.CharField(max_length=32)
meta = models.CharField(max_length=32)
# bookmark queue reading #
def scrobble_bookmark(account):
try:
bookmark = Bookmark.objects.all()[0]
except Bookmark.DoesNotExist:
return False
bookmark.delete()
tags = bookmark.tags.split(' ')
user = bookmark.account.user
for concept in Concepts.extract(bookmark.url):
for tag in tags:
Concepts.relate(user, concept['name'], tag)
return True
def scrobble_bookmarks(account):
semaphore = Semaphore(10)
for i in xrange(Bookmark.objects.count()):
thread = Bookmark_scrobble(account, semaphore)
thread.start()
class Bookmark_scrobble(Thread):
def __init__(self, account, semaphore):
Thread.__init__(self)
self.account = account
self.semaphore = semaphore
def run(self):
self.semaphore.acquire()
try:
scrobble_bookmark(self.account)
finally:
self.semaphore.release()
Это ошибка, я получаю:
Exception in thread Thread-65:
Traceback (most recent call last):
File "/usr/lib/python2.6/threading.py", line 525, in __bootstrap_inner
self.run()
File "/home/swizec/Documents/trees/bookmarklet_server/../bookmarklet_server/Scrobbler/Scrobbler.py", line 60, in run
scrobble_bookmark(self.account)
File "/home/swizec/Documents/trees/bookmarklet_server/../bookmarklet_server/Scrobbler/Scrobbler.py", line 28, in scrobble_bookmark
bookmark = Bookmark.objects.all()[0]
File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 152, in __getitem__
return list(qs)[0]
File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 76, in __len__
self._result_cache.extend(list(self._iter))
File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 231, in iterator
for row in self.query.results_iter():
File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/query.py", line 281, in results_iter
for rows in self.execute_sql(MULTI):
File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/query.py", line 2373, in execute_sql
cursor.execute(sql, params)
File "/usr/local/lib/python2.6/dist-packages/django/db/backends/sqlite3/base.py", line 193, in execute
return Database.Cursor.execute(self, query, params)
OperationalError: no such table: Scrobbler_bookmark
PS: все другие тесты в зависимости от тех же таблиц проходят с триумфом ,
"То, что я называю scrobbler". Почему это в вопросе? Я не вижу, как это помогает. –
Я думаю, это не так, но это для полноты. –
С тех пор, как вы сказали: «Я называю Scrobbler», и я чувствую себя смешно сегодня, я спрошу вот так: чувак, почему бы вам не запустить python manage.py syncdb? –