내가 scrobbler라고 부르는 것을 만들려고합니다. 작업은 대기열에서 Delicious 사용자를 읽고 모든 북마크를 가져와 북마크 대기열에 넣는 것입니다. 그런 다음 그 큐를 통해 뭔가를 파싱하고 데이터베이스에 데이터를 저장해야합니다.장고 앱 스레딩
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라고 부른다."그리고 나는 오늘 이런 식으로 물어볼 것이다. 재밌다. 너 왜 파이썬 manage.py syncdb를 실행하지? –