标签: deferred-execution

使用Python中的lambda进行延迟评估

在循环中,我试图将两个节点的两个value()s的比较推迟到以后的时间.

class Node():
    def __init__(self, v):
        self.v = v
    def value(self):
        return self.v

nodes = [Node(0), Node(1), Node(2), Node(3), Node(4), Node(2)]
results = []
for i in [0, 1, 2]:
    j = i + 3
    results.append(lambda: nodes[i].value() == nodes[j].value())

for result in results:
    print result
Run Code Online (Sandbox Code Playgroud)

结果都是True(因为我,j == 2,5对于所有lambda).我怎样才能推迟执行lambda直到实际调用它,但是使用正确的变量绑定?lambda中的表达式并不一定都是相等的...还有一堆其他更复杂的表达式.

谢谢你的帮助!

python lambda deferred-execution

9
推荐指数
3
解决办法
3112
查看次数

Linq,XmlNodes,foreach和例外

请考虑以下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.LoadXml(@"<Parts>
  <Part name=""DisappearsOk"" disabled=""true""></Part>
  <Part name=""KeepMe"" disabled=""false""></Part>
  <Part name=""KeepMe2"" ></Part>
  <Part name=""ShouldBeGone"" disabled=""true""></Part>  
</Parts>");

            XmlNode root = xmlDoc.DocumentElement;
            List<XmlNode> disabledNodes = new List<XmlNode>();

            try
            {

                foreach (XmlNode node in root.ChildNodes.Cast<XmlNode>()
                                             .Where(child => child.Attributes["disabled"] != null &&
                                                             Convert.ToBoolean(child.Attributes["disabled"].Value)))
                {
                    Console.WriteLine("Removing:");
                    Console.WriteLine(XDocument.Parse(node.OuterXml).ToString());
                    root.RemoveChild(node);
                }
            }
            catch (Exception Ex)
            {
                Console.WriteLine("Exception, as expected");
            }

            Console.WriteLine();
            Console.WriteLine(XDocument.Parse(root.OuterXml).ToString()); …
Run Code Online (Sandbox Code Playgroud)

c# linq exception deferred-execution

9
推荐指数
1
解决办法
1166
查看次数

使用CDN或外部域在内联脚本上执行脚本文件在HTML注入时

我有一个HTML注入到已加载的DOM的问题,其中在下载脚本文件后加载内联javascript.据我所知,这不应该是异步的,并且内联脚本应该在脚本文件之后执行.如果域名与调用页面相同,则此方法有效,但使用CDN甚至子域也可以执行相同的操作.我是否应该做些什么来改变我如何称呼这些?我发誓这是有效的,因为我有一个多星期的CDN,但也许我从未发现过这个问题.

安慰

Loading Inline Script
VM1400:3 Uncaught TypeError: Cannot read property 'init' of undefined(anonymous function) 
app.members.event.js?v=204&_=1453644424985:5 Loading Script File
app.members.event.js?v=204&_=1453644424985:71 Finished Script File
Run Code Online (Sandbox Code Playgroud)

使用Javascript

<script type="text/javascript" src="https://test.azureedge.net/Areas/Directors/scripts/app.members.event.js?v=204"></script>
<script type="text/javascript">
console.log('Loading Inline Script');
    app.viewModel.members.event.init();
console.log('Finished Inline Script');
Run Code Online (Sandbox Code Playgroud)

javascript dom asynchronous cdn deferred-execution

9
推荐指数
1
解决办法
2083
查看次数

如何维护LINQ延迟执行?

假设我有一个IQueryable<T>表达式,我想封装它的定义,存储它并重用它,或者稍后将它嵌入到更大的查询中.例如:

IQueryable<Foo> myQuery =
    from foo in blah.Foos
    where foo.Bar == bar
    select foo;
Run Code Online (Sandbox Code Playgroud)

现在我相信我可以保持myQuery对象并像我描述的那样使用它.但有些事情我不确定:

  1. 如何最好地参数化?最初我在一个方法中定义了这个,然后IQueryable<T>作为方法的结果返回.这样我就可以定义blahbar作为方法参数,我猜它IQueryable<T>每次都会创建一个新的.这是封装逻辑的最佳方法IQueryable<T>吗?还有其他方法吗?

  2. 如果我的查询解析为标量而不是IQueryable 例如,如果我希望此查询完全如所示,但附加.Any()只是让我知道是否有任何匹配的结果?如果我添加,(...).Any()则结果bool立即执行,对吧?有没有使用这些方式Queryable运营(Any,SindleOrDefault,等),但不立即执行?LINQ-to-SQL如何处理这个问题?

编辑:第2部分更多的是试图了解IQueryable<T>.Where(Expression<Func<T, bool>>)vs. 之间的限制差异IQueryable<T>.Any(Expression<Func<T, bool>>).在创建要延迟执行的大型查询时,似乎后者并不灵活.的Where()可以追加,然后在其它构建体可以稍后所附,然后最终执行.由于Any()返回标量值,因此它可以在构建其余查询之前立即执行.

c# linq iqueryable deferred-execution

8
推荐指数
1
解决办法
4406
查看次数

twisted:`defer.execute`和`threads.deferToThread`之间的区别

是什么区别defer.execute(),并threads.deferToThread()在扭曲?两者都使用相同的参数 - 一个函数,以及用它调用它的参数 - 并返回一个deferred,它将通过调用函数的结果触发.

threads版本明确声明它将在一个线程中运行.但是,如果defer版本没有,那么调用它有什么意义呢?在reactor中运行的代码永远不会阻塞,因此它调用的任何函数都不能阻塞.那时,您可以做defer.succeed(f(*args, **kwargs))而不是defer.execute(f, args, kwargs)使用相同的结果.

python multithreading twisted deferred-execution

8
推荐指数
1
解决办法
2703
查看次数

处理延迟对象的数组

由于使用$.Deferred我已经遇到过这种情况几次:我有一个值列表,每个值都以某种方式产生一个Deferred Object,并且我想在解析所有Deferred对象后执行回调.

一个更具体的例子是这样的:

var urls = [ 'foo.com', 'bar.com', 'baz.com', 'qux.com' ],
    defers = [], defer;

for( var i = 0, j = urls.length; i < j; i++ ){
    defer = $.ajax({
        url: 'http://' + urls[ i ]
    });

    defers.push(defer);
}

$.when.apply(window, defers).done(function(){
    // Do Something
});
Run Code Online (Sandbox Code Playgroud)

有没有比我的例子中的代码更优雅的解决方案?

jquery deferred-loading deferred-execution jquery-deferred

8
推荐指数
1
解决办法
2865
查看次数

Dapper的IEnumerable <T>是否已推迟或立即执行?

当我在Dapper中执行查询并且只想要检索一个记录块时,我可以使用.Skip().Take(),还是需要在SQL中使用select top n*?

例如,给定一个包含10,000条记录的表,我只想要前200条,因为我的列表页面每页只显示200条.我跑这个吗?

conn.Query<Widget>("select * from Widgets").Skip((page - 1) * size).Take(size);
Run Code Online (Sandbox Code Playgroud)

或这个:

conn.Query<Widget>("select top 200 * from Widgets");
Run Code Online (Sandbox Code Playgroud)

Dapper的.Query<T>方法是否延期?

c# ienumerable orm deferred-execution dapper

8
推荐指数
1
解决办法
1738
查看次数

渲染视图时是否会发生LINQ延迟执行,或者更早?

给定一个返回MVC视图的非常基本的LINQ,延迟执行在什么时候开始执行?

在控制器中:

public ActionResult Index()
{
    var model = _fooService.GetAll();
    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

在模型中:

@foreach (var item in Model) {    
    <tr>
        <td>@item.Bar</td>
   </tr>
}
Run Code Online (Sandbox Code Playgroud)

当我们调用时,查询不会被执行_fooService.GetAll(),但是会延迟到稍后的某个时间点 - 但是它执行的确切位置是什么?

  • return View(model);控制器中的语句(看起来不像)?
  • @foreach (var item in Model)视图中的线?
  • 第一次@item.Bar看到视图中的线?
  • 介于两者之间的其他东西return View(model);和正在呈现的视图?

c# linq asp.net-mvc deferred-execution

7
推荐指数
2
解决办法
681
查看次数

EntityFramework计数查询结果与计数列表

应该efQuery.ToList().CountefQuery.Count()产生相同的价值?

怎么可能efQuery.ToList().Count并且efQuery.Count()不产生相同的价值?

//GetQuery() returns a default IDbSet which is used in EntityFramework

using (var ds = _provider.DataSource())
{
    //return GetQuery(ds, filters).Count(); //returns 0???
    return GetQuery(ds, filters).ToList().Count; //returns 605 which is correct based on filters
}
Run Code Online (Sandbox Code Playgroud)

entity-framework count deferred-execution

7
推荐指数
2
解决办法
1749
查看次数

如何从Twisted中推迟Django数据库操作?

我有一个正常的Django网站运行.此外,还有另一个扭曲的过程,它使用Django的ORM监听Jabber存在通知并更新Django DB.

到目前为止,它只是调用相应的Django模型(在正确设置了设置环境之后).但是,这会阻止Twisted应用程序,这不是我想要的.

由于我不熟悉,我不知道,使用延迟以非阻塞方式访问Django DB(通过其ORM)的最佳方法是什么.

  1. deferredGenerator?
  2. twisted.enterprise.adbapi?(规避ORM?)
  3. ???

如果解析在线消息,我想在Django DB中保存具有jid_str的用户在线/离线(使用Django模型UserProfile).我用这个功能做到了:

def django_useravailable(jid_str, user_available):
    try:
        userhost = jid.JID(jid_str).userhost()
        user = UserProfile.objects.get(im_jabber_name=userhost)
        user.im_jabber_online = user_available
        user.save()
        return jid_str, user_available
    except Exception, e:
        print e
    raise jid_str, user_available,e
Run Code Online (Sandbox Code Playgroud)

目前,我用以下方式调用它:

d = threads.deferToThread(django_useravailable, from_attr, user_available)
d.addCallback(self.success)
d.addErrback(self.failure)
Run Code Online (Sandbox Code Playgroud)

python django twisted deferred-execution

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