公式の sqlanydb ドライバーを介して Twisted 11 を SQLAnywhere 12 と一緒に使用しています。
一般的に、それはうまくいきます。
ただし、最初のクエリでアプリケーションが異常終了してクラッシュすることがあります。
1 つのクエリが機能した場合、次のすべてのクエリも機能します。ただし、私のテストはめったに実行されません。
それは開発するのがひどいですし、straceも有益なことは何も教えてくれません。select() の中でクラッシュすることもあれば、mmap() の中でクラッシュすることもあります...
私は64ビットLinuxを実行しており、テストのためにdbeng12としてSybaseをローカルで実行しています。
これらのコンポーネントを使用して成功している人はいますか? それを解決する方法はありますか?以前は Django で sqlanydb を使用していましたが、クラッシュすることはありませんでした。
プリントを使用して、DeferredList 内でクラッシュすることがわかりました。重要なコードは基本的に次のとおりです。
class WhoisDb(object):
# ... shortened ...
def _get_contacts(self, dom):
if not dom:
self.d.errback(UnknownDomain(self._get_limit()))
return
self.dom = Domain._make(dom[0])
dl = defer.DeferredList( [
self.dbpool.runQuery(CON_SQL, (self.dom.dom_owner,)),
self.dbpool.runQuery(CON_SQL, (self.dom.dom_admin,)),
self.dbpool.runQuery(CON_SQL, (self.dom.dom_tech,)),
self.dbpool.runQuery(
LAST_UPDATE_SQL,
( self.dom.domName, )), ] ).addCallback(self._fmt_string)
def get_whois(self, domain):
self.d = defer.Deferred()
if not self._check_limit():
self.d.errback(LimitExceeded(MAX_PER_HOUR))
elif not RE_ALLOWED_TLDS.match(domain):
self.d.errback(UnknownDomain(self._get_limit()))
else:
self.dbpool.runQuery(
'select ' + DOM_FIELDS + ' from domains where '
'domain = ? or domain_idn = ?',
( domain, domain, )) \
.addCallback(self._get_contacts)
return self.d
クラッシュした場合、_fmt_string() は呼び出されません。
gdb 内では、単純な SIGSEV です。
(gdb) run ~/.virtualenvs/whois/bin/trial test.test_protocol.ProtocolTestCase.test_correct_domain
Starting program: /home/hynek/.virtualenvs/whois/bin/python ~/.virtualenvs/whois/bin/trial test.test_protocol.ProtocolTestCase.test_correct_domain
[Thread debugging using libthread_db enabled]
test.test_protocol
ProtocolTestCase
test_correct_domain ... [New Thread 0x7ffff311a700 (LWP 6685)]
[New Thread 0x7ffff3099700 (LWP 6686)]
[New Thread 0x7ffff27dc700 (LWP 6723)]
[New Thread 0x7ffff1fdb700 (LWP 6724)]
[New Thread 0x7ffff17da700 (LWP 6725)]
[New Thread 0x7ffff0fd9700 (LWP 6729)]
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff1fdb700 (LWP 6724)]
0x00007ffff4d4167c in ?? () from /opt/sqlanywhere12/lib64/libdbcapi_r.so