小编dom*_*ato的帖子

Flask应用程序"使用stat重新启动"

我已经构建了一些Flask应用程序,但在我的最新项目中,我注意到在开发模式下有点奇怪.终端中常用消息的第二行始终显示:

 * Running on http://127.0.0.1:5000/
 * Restarting with reloader
Run Code Online (Sandbox Code Playgroud)

已被替换为:

 * Restarting with stat
Run Code Online (Sandbox Code Playgroud)

我认为我没有做过任何不同的事情,事实上,我开始克隆一个我多次使用的入门套件项目,它本身并没有显示出这种行为.我还注意到这个项目稳定地消耗了大约15%的CPU,而我的另一个项目几乎没有什么特点.

任何想法为什么会这样?

python flask

53
推荐指数
3
解决办法
3万
查看次数

在golang中调用的可比接口是什么?

我正在golang中进行一个简单的链表实现,用于学习目的.元素的定义如下:

type Element struct {
    next, prev *Element
    Value      interface{}
}
Run Code Online (Sandbox Code Playgroud)

如您所见,Value可以是满足空接口的任何东西.现在,作为一个新功能,我想这样做,当你在列表中插入一个新元素时,它会以排序的方式插入它 - 每个元素将<=下一个.

为了做到这一点,我写了以下方法:

func (l *LinkedList) Add(val interface{}) *Element {
    this := &l.Root
    e := Element{Value: val}
    for {
        if this.next.Value != nil && this.next.Value < val {  // <-comparison here
            this = this.next
        } else {
            return l.insert(&e, this)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨operator < not defined on interface哪个是公平的.所以我理解在我的Element typedef中,我应该将Value限制为可以使用<运算符进行比较的类型.我在研究golang不支持运算符重载的问题时学到了这一点 - 我不是想这样做.相反,我只是想确保Element.Value是一个可以使用<运算符进行比较的类型.我该怎么做呢?

更新:

在我看来,简单地定义基于内置的新类型可能并不困难,可以通过某种功能进行比较.所以我写了这个烂摊子(以及其他尝试做同样事情的方法):

type Comparable interface {
    LessThan(j interface{}) bool // …
Run Code Online (Sandbox Code Playgroud)

interface linked-list go comparison-operators

10
推荐指数
1
解决办法
7051
查看次数

如何使用flask-security在登录时运行自定义代码

我是新手,但是对python有一定的精通 - 我有一个烧瓶应用程序,它使用flask-security进行用户身份验证.我想为用户登录过程添加一些额外的功能.具体来说,我需要在登录时将用户的auth_token(我将其设置为一次性使用令牌)保存到数据库,并在注销时将其删除.问题来了,因为烧瓶安全性(据我所知)没有直接向开发人员公开登录的机制.据我所知,它从代码中导入了flask-login,它使用了login_user函数.

我开始尝试通过导入flask.ext.login(通常,我不需要这样做)来重写此函数,并重新定义函数,如下所示:

import flask.ext.login as a
def new_login_user():
    ...copy of existing function goes here...
    ...Plus new stuff with current_user.get_auth_token()...
a.login_user = new_login_user
Run Code Online (Sandbox Code Playgroud)

然而,我遇到了各种各样的命名空间问题,这似乎是一种非常丑陋的方式.

我当时认为可能有一种方法可以用装饰器做到这一点,但我是新手,并且没有使用装饰器.

关于最佳方法可能是什么的任何想法?对于上下文,我想要db中的auth_token,因为我需要将网站身份验证传递给另一个进程,该进程也访问数据库.另一个过程是使用websockets的API服务器.我不想结合这些流程.

python flask flask-security

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

从javascript FileReader onload事件计算的返回值

我有这个功能:

function doStuff(range, file) {
    var fr = new FileReader();
    var hash = '';
    fr.onload = function (e) {
        var out = "stuff happens here";
        hash = asmCrypto.SHA256.hex(out);
        return hash;
    };
    fr.readAsArrayBuffer(file);
    return hash;
}
Run Code Online (Sandbox Code Playgroud)

现在,该函数在onload事件完成之前完成,因此doStuff总是返回"".我认为回调是我需要的,但我是javascript的新手,在这种情况下我无法理解如何实现它.

javascript callback onload filereader

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

子类str,并使新方法与+ =具有相同的效果

我正在尝试子类str- 不是为了重要的东西,只是一个实验来了解有关Python内置类型的更多信息.我已经按照str这种方式进行了子类化(使用__new__因为str是不可变的):

class MyString(str):
    def __new__(cls, value=''):
        return str.__new__(cls, value)
    def __radd__(self, value):  # what method should I use??
        return MyString(self + value)  # what goes here??
    def write(self, data):
        self.__radd__(data)
Run Code Online (Sandbox Code Playgroud)

据我所知,它初始化正确.但我无法使用+ =运算符进行就地修改.我试图压倒一切的__add__,__radd__,__iadd__以及其他各种配置.使用return语句,香港专业教育学院设法让它返回正确附加的新实例MyString,但不是就地修改.成功看起来像:

b = MyString('g')
b.write('h')  # b should now be 'gh'
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

UPDATE

为了可能添加某人可能想要这样做的原因,我遵循了创建以下在内部使用普通字符串的可变类的建议:

class StringInside(object):

    def __init__(self, data=''):
        self.data = data

    def write(self, data):
        self.data += data

    def read(self): …
Run Code Online (Sandbox Code Playgroud)

python string subclass immutability built-in

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

golang 的失败似乎出乎意料

我有以下代码:

package main

import (
    "fmt"
)

func main() {
    switch {
    case 1 == 1:
        fmt.Println("1 == 1")
        fallthrough
    case 2 == 1:
        fmt.Println("2 == 1")
    }
}
Run Code Online (Sandbox Code Playgroud)

在 go 操场上打印两行 -请参阅此处的示例。我本来希望 fallthrough 语句包括对下一个case语句的评估,但情况似乎并非如此。

当然,我总是可以使用一堆if语句,所以这不是一个真正的障碍,但我很好奇这里的意图是什么,因为在我看来这不是一个明显的结果。

有人愿意解释吗?例如:在这段代码中,我怎样才能让第 1 和第 3 种情况执行?

go switch-statement fall-through

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

golang计算虚拟核心,而不是物理核心?

我有一些golang代码我在我的Macbook(具有两个物理内核的Intel Core i5处理器)上进行基准测试.

golang runtime.NumCPU()收益4,因为它算"虚拟核心"

在这种情况下,我对虚拟内核了解不多,但我的基准测试似乎表明,当我使用配置代码时,多处理速度只有2倍

runtime.GOMAXPROCS(runtime.NumCPU())
Run Code Online (Sandbox Code Playgroud)

如果我使用2而不是4核,我会得到相同的性能.我会发布代码,但我认为这与我的问题基本无关,它们是:

1)这是正常的吗?

2)为什么,如果是的话,多个虚拟核心能否像我的macbook这样的机器受益?

更新:

如果它很重要,在我的代码中,有与您设置runtime.GOMAXPROCS() 的任何内容相同数量的goroutine,任务完全并行,没有相互依赖性或共享状态.它作为本机编译二进制文件运行.

virtualization multiprocessing go hyperthreading

4
推荐指数
1
解决办法
998
查看次数

使用gob打包递归定义的结构

我主要使用Python,但我正在玩Go.我写了以下内容来做一些在python中非常简单的事情,我希望它也可以在Go中完成.

package main

import (
    "bytes"
    "encoding/gob"
    "fmt"
    "io/ioutil"
)

type Order struct {
    Text string
    User *User
}

type User struct {
    Text  string
    Order *Order
}

func main() {
    o := Order{}
    u := User{}
    o.Text = "order text"
    u.Text = "user text"

    // commenting this section prevents stack overflow
    o.User = &u
    u.Order = &o
    fmt.Println("o.u.text:", o.User.Text, "u.o.text:", u.Order.Text)
    // end section

    m := new(bytes.Buffer)
    enc := gob.NewEncoder(m)
    enc.Encode(o)
    err := ioutil.WriteFile("gob_data", m.Bytes(), 0600)
    if err != …
Run Code Online (Sandbox Code Playgroud)

go recursive-datastructures gob

3
推荐指数
1
解决办法
410
查看次数

按属性聚合对象数组

我有一个dicts列表,每个都有两个键/值对.我需要通过对第二个键的值进行求和来组合第一个键共享相同值的词组.例如:

[
    {'foo': 34, 'bar': 2}, 
    {'foo': 34, 'bar': 3}, 
    {'foo': 35, 'bar': 1}, 
    {'foo': 35, 'bar': 7}, 
    {'foo': 35, 'bar': 2}
]
Run Code Online (Sandbox Code Playgroud)

会出来的:

[
    {'foo': 34, 'bar': 5}, 
    {'foo': 35, 'bar': 10}
]
Run Code Online (Sandbox Code Playgroud)

我编写了以下函数,它可以工作,但看起来非常冗长,我几乎可以肯定有一个很酷的pythonic技巧,它会更干净,性能更高.

def combine(arr):
    arr_out = []
    if arr:
        arr_out.append({'foo': arr[0]['foo'], 'bar': 0})
        for i in range(len(arr)):
            if arr[i]['foo'] == arr_out[-1]['foo']:
                arr_out[-1]['bar'] += arr[i]['bar']
            else:
                arr_out.append({'foo': arr[i]['foo'], 'bar': arr[i]['bar']})
    return arr_out
Run Code Online (Sandbox Code Playgroud)

有人有什么建议吗?

python dictionary list

3
推荐指数
1
解决办法
55
查看次数

terraform 可以简单地用于在不同的 AWS 区域中创建资源吗?

我有以下deploy.tf文件:

provider "aws" {
  region          = "us-east-1"
}

provider "aws" {
  alias           = "us_west_1"
  region          = "us-west-2"
}

resource "aws_us_east_1" "my_test" {
  # provider        = "aws.us_east_1"
  count           = 1
  ami             = "ami-0820..."
  instance_type   = "t2.micro"
}

resource "aws_us_west_1" "my_test" {
  provider        = "aws.us_west_1"
  count           = 1
  ami             = "ami-0d74..."
  instance_type   = "t2.micro"
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用它来部署 2 台服务器,每个区域一台。我不断收到以下错误:

aws_us_east_1.narc_test: Provider doesn't support resource: aws_us_east_1
Run Code Online (Sandbox Code Playgroud)

我已尝试为两个提供程序块设置别名,并以多种不同方式引用正确的区域。我已经阅读了多区域支持,一些答案表明这可以通过模块来完成,但是,这是一个简单的测试,我想保持简单。这是目前可能的吗?

amazon-web-services terraform aws-regions

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