小编Dan*_*eny的帖子

优化App Engine上的RSS解析以避免高CPU警告

我正在将一些RSS源添加到App Engine中的数据存储区中,以便为iPhone应用程序提供服务.我使用cron来安排每x分钟更新一次RSS.每个任务只解析一个RSS源(有15-20个项目).我经常收到有关App Engine仪表板中高CPU使用率的警告,因此我正在寻找优化代码的方法.

目前,我使用minidom(因为它已经在App Engine上),但我怀疑它不是很有效!

这是代码:

 dom = minidom.parseString(urlfetch.fetch(url).content)
    if dom:
        items = []
        for node in dom.getElementsByTagName('item'):
            item = RssItem(
                key_name = self.getText(node.getElementsByTagName('guid')[0].childNodes),
                title = self.getText(node.getElementsByTagName('title')[0].childNodes),
                description = self.getText(node.getElementsByTagName('description')[0].childNodes),
                modified = datetime.now(),
                link = self.getText(node.getElementsByTagName('link')[0].childNodes),
                categories = [self.getText(category.childNodes) for category in node.getElementsByTagName('category')]
            );
            items.append(item);
        db.put(items);

def getText(self, nodelist):
    rc = ''
    for node in nodelist:
        if node.nodeType == node.TEXT_NODE:
            rc = rc + node.data
    return rc
Run Code Online (Sandbox Code Playgroud)

没有太多事情发生,但脚本通常需要2-6秒的CPU时间,这似乎有点过于循环20个项目和阅读一些属性.

我能做些什么来加快速度?上面的代码中有什么特别糟糕的,或者我应该改为另一种解析方式?是否有更好的库(适用于App Engine),或者我自己更好地解析RSS?

python google-app-engine

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

将 UTF-16 视为固定的 16 位编码会产生什么问题?

我正在阅读一些关于 Unicode 的问题,其中有一些我不完全理解的评论,例如:

Dean Harding:UTF-8是一种变长编码,处理起来比定长编码更复杂。另外,请参阅我对 Gumbo 答案的评论:基本上,所有编码(UTF-8、UTF-16 和 UTF-32)中都存在组合字符,并且它们需要特殊处理。您可以使用与组合字符相同的特殊处理来处理 UTF-16 中的代理项对,因此在大多数情况下您可以忽略代理项并将 UTF-16 视为固定编码。

我对最后一部分(“大部分”)有点困惑。如果UTF-16被视为固定的16位编码,这会导致什么问题?存在 BMP 之外的字符的可能性有多大?如果存在,如果您假设为两字节字符,这可能会导致什么问题?

我阅读了关于代孕者的维基百科信息,但它并没有真正让我更清楚事情!

编辑:我想我真正的意思是“为什么有人建议将 UTF-16 视为固定编码,而它看起来是假的?”

编辑2:

我在“ Is There Any Reasons to Preferred UTF-16 over UTF-8? ”中找到了另一条评论,我认为这更好地解释了这一点:

Andrew Russell:就性能而言:UTF-8 比 UTF-16 更难解码。在 UTF-16 中,字符要么是基本多语言平面字符(2 字节),要么是代理对(4 字节)。UTF-8 字符可以是 1 到 4 个字节之间的任意位置

这表明 UTF-16 不会有任何三字节字符,因此通过假设 16 位,您不会因减少一个字节而“完全搞砸”。但我仍然不相信这与假设 UTF-8 是单字节字符有什么不同!

unicode utf-16 unicode-string

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

f#的int中get_Zero是什么/在哪里?

我刚刚学习F#,在tryfsharp.org上玩的时候,我注意到如果我更改了这段代码:

[0..100]
|> List.sum
Run Code Online (Sandbox Code Playgroud)

["A"; "B"; "D"]
|> List.sum
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

The type 'string' does not support the operator 'get_Zero'
Run Code Online (Sandbox Code Playgroud)

(这是你可以在你的浏览器中运行/修改的脚本,虽然它似乎只适用于我的IE!)

当我检查List.sum的定义时 ; 它说类型必须有一个名为Zero的静态成员.这似乎解释了错误; 除了我无法在int上看到任何名为Zero的成员!

所以; 这个适用于整数的零成员在哪里?如果我输入int.,我也无法在intellisense中看到它,也不会在docs中看到它,因为int只是一个.NET System.Int32(它似乎没有静态Zero属性).

(注意:它确实在错误中说"运算符"而不是"成员";这可能是相关的;虽然List.sum定义只是说"成员").

.net f# functional-programming compiler-errors f#-scripting

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

如何在调用Wait时创建一个在body内部使用await的任务,该任务与同步版本的行为相同?

我有一些代码可以创建一个像这样做一些缓慢工作的任务:

public static Task wait1()
{
    return new Task(() =>
    {
        Console.WriteLine("Waiting...");
        Thread.Sleep(10000);
        Console.WriteLine("Done!");
    });
}
Run Code Online (Sandbox Code Playgroud)

在实际实现中,Thread.Sleep实际上将是一个Web服务调用.我想改变方法的主体可以使用await(因此它在网络访问/休眠期间不消耗线程).我的第一次尝试(基于shotgun调试编译错误)是这样的:

public static Task wait2()
{
    return new Task(async () =>
    {
        Console.WriteLine("Waiting...");
        await Task.Delay(10000);
        Console.WriteLine("Done!");
    });
}
Run Code Online (Sandbox Code Playgroud)

然而; 这个任务似乎与第一个任务的行为不一样,因为当我在它上面调用.Wait()时; 它会立即返回.

下面是一个显示差异的完整示例(控制台应用程序)(应用程序将在第二个任务启动时立即结束).

我需要做什么,以便我可以调用启动和等待任务,恰好在其中使用await代码?任务排队并稍后由代理执行,因此任务不会自动启动至关重要.

class Program
{
    static void Main(string[] args)
    {
        var w1 = wait1();
        w1.Start();
        w1.Wait(); // This waits 110 seconds

        var w2 = wait2();
        w2.Start();
        w2.Wait(); // This returns immediately
    }

    public static Task wait1()
    {
        return new Task(() =>
        {
            Console.WriteLine("Waiting..."); …
Run Code Online (Sandbox Code Playgroud)

.net c# asynchronous async-await .net-4.5

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

有没有明显的方法来确认函数是否是尾递归的?

有没有办法判断F#中的函数是否是尾递归的?

我试图解释它,但有些人似乎很挣扎,并且问是否有办法确认他们做了什么是尾递归.你有什么容易做的(除了试图让它溢出堆栈)以确认尾部响应(或不)(最好是在IDE中)?

(我试过Reflector,但是当我打开F#项目时它就崩溃了!)

.net f# functional-programming tail-recursion

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

如何让Visual Studio的测试窗口使用我的ITestContainerDiscoverer?

我正在尝试为Visual Studio 2013编写测试适配器(我正在使用Update 1运行Premium,并且安装了VS SDK,因此我可以引用所有VS DLL).因为它可以解决原始内容文件而不是编译的dll/exe,所以我似乎需要创建一个ITestContainerDiscoverer.

我在网上发现了一些似乎实施了这些的公共回购; 例如:

打字稿,Json的,节点,还有更多

然而; 我的代码看起来是相同的(和VS DLL相同的引用),但似乎永远不会触发.我放了File.Write,Console.WriteLine,Debuuger.Launch,还附加了另一个VS实例.这是我班级目​​前的样子:

[Export(typeof(ITestContainerDiscoverer))]
public class MyTestContainerDiscoverer : ITestContainerDiscoverer
{
    [ImportingConstructor]
    public MyTestContainerDiscoverer([Import(typeof(SVsServiceProvider))] IServiceProvider serviceProvider)
    {
        File.WriteAllText(@"M:\Coding\Applications\LuaTestAdapter\LuaTestAdapter\bin\Debug\Danny.txt", "TEST!");
        Console.WriteLine("IT'S RUNNING!");
        Debugger.Launch();
    }

    public Uri ExecutorUri
    {
        get { return TestExecutor.ExecutorUri; }
    }

    public IEnumerable<ITestContainer> TestContainers
    {
        get
        {
            return new[] {
                new TestContainer(this, @"M:\TestProject\Test.lua")
            };
        }
    }

    public event EventHandler TestContainersUpdated;
}
Run Code Online (Sandbox Code Playgroud)

我在一个以.TestAdapter.dll结尾的DLL中构建它,并手动将其复制到C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\Extensions然后启动VS. VS正确加载TestAdapter,因为在同一个项目中,我的TestDiscoverer(当前包含DLL作为调试扩展)正在输出到控制台:

[FileExtension(".lua")]
[FileExtension(".dll")] …
Run Code Online (Sandbox Code Playgroud)

.net c# visual-studio visual-studio-2013

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

F#3.1是否需要安装特定的运行时?

我编写了一些支持VS2012 + VS2013的Visual Studio扩展.我想在其中使用F#; 我对目标运行时有点困惑......

我的目标是.NET 4.5(不是4.5.1),但我也可以选择F#3.0和3.1.我知道F#3.1附带VS2013(和.NET 4.5.1),所以我不确定是否:

  1. 我可以使用F#3.1和.NET 4.5,还是F#3.1需要.NET 4.5.1?(VS让我选择这个组合)
  2. 针对F#3.1的项目是否可以在安装了VS2012且没有安装新运行时的计算机上运行?我看到一篇博文提到了"F#运行时"; 但FSharp.Core.dll包含在我的构建中,所以目前还不清楚这是否足以使用3.1?

(目标3.0没什么大不了的; 3.1中似乎没有大量数据;但了解这些事情的相关性会很有用).

.net f# f#-3.0 visual-studio-2012

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

为什么Docker在使用-P时没有正确暴露我的端口但是使用-p 80:80?

我的Dockerfile包含:

EXPOSE 80
Run Code Online (Sandbox Code Playgroud)

然而,如果我运行图像,-P我无法连接到它.运行-p 80:80良好.

danny@linux:~$ sudo docker run -d -P dart-test
               b3277a5483531f6dc23a1c807cf895103fd5333b603c1b4a352e07c9721f1a48

# Can't connect here
danny@linux:~$ curl http://localhost/
               curl: (7) Failed to connect to localhost port 80: Connection refused

danny@linux:~$ sudo docker stop b3277
               b3277

danny@linux:~$ sudo docker run -d -p 80:80 dart-test
               dfe68699bfb33ce33e8e6e1953ac828b9d31209988df64e2627d9228758438ba

# Connects fine here
danny@linux:~$ curl http://localhost/
               Hello, world!

danny@linux:~$ 
Run Code Online (Sandbox Code Playgroud)

docker

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

Flutter websocket 断开监听

在 Flutter 中,我想监听 websocket 断开连接事件,如何实现? 当应用程序进入后台时websocket 连接将被删除,我仍然没有找到让它在后台继续运行的方法(有没有人有解决方案?),所以我必须检测 websocket 连接是否丢失或什么的,以便我失去连接时可以重新连接。如果有人知道如何实现这一点,请帮忙。

websocket dart flutter

5
推荐指数
2
解决办法
6160
查看次数

为什么这个使用 FakeAsync 的测试只是挂在“等待”上,即使未来已经完成?

我正在尝试使用 FakeAsync 编写一个测试,但它似乎挂在我的awaits 上。这是一个精简的示例:

  test('danny', () async {
    await FakeAsync().run((FakeAsync async) async {
      print('1');
      final a = Future<bool>.delayed(const Duration(seconds: 5))
          .then((_) => print('Delayed future completed!'))
          .then((_) => true);

      print('2');
      async.elapse(const Duration(seconds: 30));
      // Tried all this too...
      // async.flushMicrotasks();
      // async.flushTimers();
      // async.elapse(const Duration(seconds: 30));
      // async.flushMicrotasks();
      // async.flushTimers();
      // async.elapseBlocking(const Duration(seconds: 30));

      print('3');
      await a;

      print('4');
      expect(1, 2);
    });
  });
Run Code Online (Sandbox Code Playgroud)

此代码输出:

1
2
Delayed future completed!
3
// hangs and never prints '4'
Run Code Online (Sandbox Code Playgroud)

async.elapse呼叫被允许完成未来,但它仍然挂起await …

async-await dart flutter

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