小编Mat*_*ttM的帖子

如何正确使用select中的超时参数?

我是套接字编程的新手(对Python也有些陌生),并且我无法让选择超时按照我想要的方式工作(在服务器端)。在客户端连接之前,超时工作正常。我给它的值是 1 秒,并且超时在我的循环中每 1 秒到期一次。

然而,一旦客户端连接,它不会等待 1 秒就告诉我超时已到。它只是尽可能快地循环并告诉我超时已到。这是我的代码片段:

while running:
    try:
        self.timeout_expired = False
        inputready, outputready, exceptready = select.select(self.inputs, self.outputs, [], self.timeout)
    except select.error, e:
        break
    except socket.error, e:
        break

    if not (inputready):
        # Timeout expired
        print 'Timeout expired'
        self.timeout_expired = True

    # Additional processing follows here
Run Code Online (Sandbox Code Playgroud)

我不确定这是否足够代码来查看我的问题所在,所以如果您需要查看更多内容,请告诉我。基本上,在客户端连接后,至少看起来它忽略了 1 秒的超时,只是尽可能快地运行,不断告诉我“超时已过期”。知道我缺少什么吗?

非常感谢!!

编辑:我应该澄清...“inputready”表示来自连接或发送数据到服务器的客户端的输入,以及来自服务器的标准输入。从 select 返回的其他变量只是服务器端变量,我想做的是检测 CLIENT 是否花了太长时间才回复,所以我只检查 inputready 是否为空。

python sockets timeout

6
推荐指数
1
解决办法
1万
查看次数

BackboneJS:如何从视图的事件哈希调用函数外部视图?

举个例子,这就是我要做的......

function doSomething(customParameter) {
    console.log(customParameter);
}

var MyView = Backbone.View.extend({
    // Other view stuff, skipping it...
    events: {
        'click .someClass': doSomething(customParameter)
    }
});
Run Code Online (Sandbox Code Playgroud)

这里的动机是我希望能够将变量(视图的本地)传递给视图外的其他函数.我想这样做的原因是"其他功能"只写了一次而不是四次......它会严重地保存我的项目超过100行代码.

经过大量谷歌搜索后,我还没有找到解决方案...任何想法?

谢谢!

javascript jquery backbone.js

6
推荐指数
1
解决办法
1125
查看次数

DocumentDB每次在大页面提取时返回不同的结果计数

问题

我试图从docdb中提取大约20,000个文档.为了减少我提取的金额,我只是提取文件的ID.我正在翻阅结果,当我在完成后建立一个列表时,我发现结果的数量发生了变化(而且它们都错了!).它没有得到它应该得到的所有结果.目前没有其他流程涉及数据.

这是我如何查询的想法:

var sql = new SqlQuerySpec(@"SELECT items.id FROM items WHERE items.foo = @bar")
{
    Parameters = new SqlParameterCollection { new SqlParameter("@bar", bar) }
};

var feedOptions = new FeedOptions { MaxItemCount = 2000 };
var query = this.Context.Client.CreateDocumentQuery<Foo>(dbSelfLink, sql, feedOptions).AsDocumentQuery();

var ids = new List<string>();

while (query.HasMoreResults)
{
    var page = await query.ExecuteNextAsync<Foo>().ConfigureAwait(false);
    ids.AddRange(page.AsEnumerable());
}
Run Code Online (Sandbox Code Playgroud)

我在调试时运行了三次并获得了三个不同的ID计数:

19,323
19,321
19,327
Run Code Online (Sandbox Code Playgroud)

而且这些都没有我期望的那么高.它们在我预期的100左右之内.

我已经排除了什么

  • 这不是反序列化问题,因为我已经尝试更改查询以选择不在结果集中的ID,并且它可以很好地抓取它.

  • 它不是查询本身,因为我可以在Azure门户的查询资源管理器中运行相同的查询,并另外AND items.id = '...' 查找特定的缺失ID并返回它.

  • 这不是我正在进行分页的方式,因为我在其他地方使用相同的方法进行较小的查询(~100个结果)并且它工作正常.

  • 这不是因为我正在越过数据中心边界,因为这也发生在生产中.

我怀疑的是什么

可能是我的速度有限(我的两个收藏是S2),但我不确定为什么会改变结果的数量,或者我将如何证明这一点.我可能会尝试将集合升级到S3以查看是否可以解决问题,但这对我来说不会长期有效.

除此之外,我真的很感激任何有关可能发生的事情的见解.谢谢!

编辑

我尝试升级收藏品.没变.

编辑2以回复评论

是的,我们正在使用懒惰的索引...我开始怀疑这是否是罪魁祸首但不确定为什么会导致我们没有获得所有记录.如果这需要改变,那可能没问题,因为索引最初是在没有太多考虑的情况下完成的(而且它使用的是旧格式,你可以在这里看到).以下是索引政策:

{ …
Run Code Online (Sandbox Code Playgroud)

c# azure azure-cosmosdb

5
推荐指数
1
解决办法
1036
查看次数