使用cassandra python驱动程序与扭曲

1hdlvixo  于 2022-11-05  发布在  Cassandra
关注(0)|答案(1)|浏览(163)

我的python应用程序使用了twisted,并在引擎盖下使用了cassandra python驱动程序。Cassandra python驱动程序可以使用cassandra.io.twistedreactor.TwistedConnection作为连接类来使用twisted作为查询的方式。
TwistedConnection类使用timer和reactor.callLater来检查查询任务是否已超时。
问题是当我使用cassandra ORM(cassandra.cqlengine.models.Model)进行查询时。

from cassandra.cqlengine import columns
from cassandra.cqlengine.models import Model

# ORM for user settings

class UserSettings(Model):
    userid = columns.Text(primary_key=True)
    settings = columns.Text()

# Function registered with autobahn/wamp

def worker():
    userid = "96c5d462-cf7c-11e7-b567-b8e8563d0920"

    def _query():
        # This is a blocking call, internally calling twisted reactor
        # to collect the query result
        setting = model.UserSettings.objects(userid=userid).get()
        return json.loads(setting.settings)

    threads.deferToThread(_query)

当在twisted.trial单元测试中运行时。使用上述代码的测试总是失败,
失败:扭曲.试验.实用程序.脏React器聚集错误:React器不干净。

DelayedCalls: (set twisted.internet.base.DelayedCall.debug = True to debug)
<DelayedCall 0x10e0a2dd8 [9.98250699043274s] called=0 cancelled=0 TwistedLoop._on_loop_timer()

在高速公路工人在哪里使用这个代码,然而工程罚款.
TwistedConnection的cassandra驱动程序代码不断调用callLater,我无法找到一种方法来查找这些调用中是否有任何调用仍处于挂起状态,因为这些调用隐藏在TwistedLoop类中。
问题:

  • 这是正确的处理cassandra查询的方式吗(这反过来会被称为扭曲的React器)
  • 如果是,是否有办法解决cassandra驱动程序超时(reactor.callLater)导致的DelayedCall问题。
h5qlskok

h5qlskok1#

只是我的理解:
1.也许您需要在过滤时调用.filter函数?如docssetting = model.UserSettings.objects.filter(userid=userid).get()中所述
1.也许通过在Cassandra conf yaml文件中更改响应时间来解决问题?

相关问题