小编rep*_*lay的帖子

"损坏的双链表"是什么意思

我最近从我的PHP中得到以下错误:

WARNING: [pool www] child 42475 said into stderr: "*** glibc detected *** php-fpm: pool www: corrupted double-linked list: 0x00000000013fe680 ***"
Run Code Online (Sandbox Code Playgroud)

我不是很担心这个问题,也不是很有兴趣修复它.但我非常有兴趣了解这个错误'损坏的双链表'究竟意味着什么,因为我之前没有见过它.我相信知道双链表是什么,但是我没能产生一个触发这个错误的程序.

有人能为我提供一小段代码,当我编译并执行它时会导致glibc说'损坏的双链表'吗?

memory-management glibc

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

jq:按属性分组和键

我有一个对象列表,如下所示:

[
  {
    "ip": "1.1.1.1",
    "component": "name1"
  },
  {
    "ip": "1.1.1.2",
    "component": "name1"
  },
  {
    "ip": "1.1.1.3",
    "component": "name2"
  },
  {
    "ip": "1.1.1.4",
    "component": "name2"
  }
]
Run Code Online (Sandbox Code Playgroud)

现在,我想对组件进行分组和键入,并为每个组件分配一个ips列表:

{
  "name1": [
    "1.1.1.1",
    "1.1.1.2"
  ]
},{
  "name2": [
    "1.1.1.3",
    "1.1.1.4"
  ]
}
Run Code Online (Sandbox Code Playgroud)

grouping json key jq

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

当非阻塞套接字上的连接断开时,`sock.recv()` 返回空字符串

我在 Python 中有一个名为 的非阻塞套接字sock。根据我的理解,recv()如果连接已被对等方关闭,该方法应该引发异常,但它返回一个空字符串(''),我不知道为什么。

这是我测试的脚本(来自这里):

import sys
import socket
import fcntl, os
import errno
from time import sleep

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1',9999))
fcntl.fcntl(s, fcntl.F_SETFL, os.O_NONBLOCK)

while True:
    try:
        msg = s.recv(4096)
        print("got data '{msg}'".format(msg=msg))
    except socket.error, e:
        err = e.args[0]
        if err == errno.EAGAIN or err == errno.EWOULDBLOCK:
            sleep(1)
            print 'No data available'
            continue
        sys.exit(1)
Run Code Online (Sandbox Code Playgroud)

如果对等方关闭连接,则此套接字应该引发socket.errorrecv()但它只返回''

我使用两个终端以这种方式进行测试:

# Terminal 1
~$ nc -l -p9999

# …
Run Code Online (Sandbox Code Playgroud)

python sockets python-2.7

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

正则表达式匹配MAC地址并提取它的值

我正在尝试首先检查字符串是否确认MAC地址的格式,如果确实如此,我想从字符串中提取所有字节值.

到目前为止我写了这个,如果mac地址的格式是正确的,它会成功匹配:

 mac_regx = re.compile(r'^([0-9A-F]{1,2})(\:[0-9A-F]{1,2}){5}$', re.IGNORECASE)
Run Code Online (Sandbox Code Playgroud)

但是当我使用这个正则表达式来提取字节值时,我只得到第一个和最后一个:

(Pdb) print(mac_regx.findall('aa:bb:cc:dd:ee:ff'))
[('aa', ':ff')]
Run Code Online (Sandbox Code Playgroud)

我知道我可以简单地split通过:这将做的工作.我只是希望能够通过一个正则表达式一步完成匹配和值提取.

python regex

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

C++从函数调用的多个返回构建字符串向量的最佳方法

我正在练习C++,所以这不是将要投入生产的代码,但我很想知道:

我有一个指向类型对象的指针向量Player:

std::vector<Player*> _players;
Run Code Online (Sandbox Code Playgroud)

std::string当我称之为方法时get_name(),每个玩家都会返回他的名字,例如:

std::string player0_name = _players[0]->get_name();
Run Code Online (Sandbox Code Playgroud)

我想将所有玩家名称传递给一个函数,该函数期望它们作为字符串向量的引用:

void all_player_names( std::vector< std::string >& );
Run Code Online (Sandbox Code Playgroud)

现在我知道通过一些临时变量很容易做到这一点.我可以先创建一个字符串向量,在那里存储所有玩家名称,然后将其all_player_names作为参考传递给函数.

但我正在寻找一种方法,而无需创建临时变量.它应该类似于Python中的列表理解.它必须迭代Player指针数组,get_name()在每个指针上调用函数,从返回的字符串中构建一个向量并直接将其传递给函数all_player_names.我假设应该可以使用lambda函数和STL中的一些算法,但我不知道哪一个.

所以看起来应该或多或少是这样的:

all_player_names(<function that i'm looking for>(
    _players, [](Player* p) { return p->get_name();}
);
Run Code Online (Sandbox Code Playgroud)

STL中有这样的算法吗?

c++ string lambda vector c++11

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

SQLAlchemy 为每个查询添加注释

我试图让 SQLAlchemy 为我提交的每个查询添加注释。

我从文档中知道我可以做这样的事情:

from sqlalchemy.sql.expression import Insert

@compiles(Insert)
def prefix_inserts(insert, compiler, **kw):
    return compiler.visit_insert(insert.prefix_with("/* comment */"), **kw)
Run Code Online (Sandbox Code Playgroud)

但是我无法弄清楚如何为每个查询都做到这一点,无论是什么类型,而不必在compiles装饰器中列出每个查询。

python sqlalchemy

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

按键合并词典列表的更好方法

我有一个字典列表和一个可以从列表中的每个字典中提取值的函数.目标是我得到一个字典,其中键是给定函数返回的值,当我从给定的字典列表中传递字典时.返回字典中的相应值应该是原始字典列表中的字典子集,给定函数返回相应的键.

我知道这个解释很混乱,所以我在一个实现中展示它:

keygen = lambda x: x['key']

data = [{'key': 'key1',
         'data': 'value2'},
        {'key': 'key3',
         'data': 'value2'},
        {'key': 'key2',
         'data': 'value2'},
        {'key': 'key2',
         'data': 'value2'},
        {'key': 'key1',
         'data': 'value2'}]

def merge_by_keygen(data, keygen):
    return_value = {} 
    for dataset in data:
        if keygen(dataset) not in return_value.keys():
            return_value[keygen(dataset)] = [] 
        return_value[keygen(dataset)].append(dataset)
    return return_value

merge_by_keygen(data, keygen)
Run Code Online (Sandbox Code Playgroud)

收益:

{'key3': [{'data': 'value2', 'key': 'key3'}], 
 'key2': [{'data': 'value2', 'key': 'key2'}, {'data': 'value2', 'key': 'key2'}], 
 'key1': [{'data': 'value2', 'key': 'key1'}, {'data': 'value2', 'key': 'key1'}]}
Run Code Online (Sandbox Code Playgroud)

我正在寻找相同逻辑的更好,更紧凑的实现,比如一些字典/列表推导.谢谢!

python python-2.7

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

采用地图的功能只关心密钥类型

我有两个地图,它们都是键控的strings,但值是两种不同的自定义类型.

map[string]type1
map[string]type2
Run Code Online (Sandbox Code Playgroud)

现在我想写一个函数,它可以接受这两种类型中的任何一种的参数,因为该函数只查看键而不关心值.所以我认为它应该是这样的:

func takeTheMap(argument map[string]interface{}) {
...
Run Code Online (Sandbox Code Playgroud)

但这不起作用,原因是:

cannot use myVariable (type map[string]customType) as type map[string]interface {} in argument to takeTheMap
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/4Xkhi4HekO5

我能以某种方式完成这项工作吗?

go

0
推荐指数
1
解决办法
42
查看次数

标签 统计

python ×4

python-2.7 ×2

c++ ×1

c++11 ×1

glibc ×1

go ×1

grouping ×1

jq ×1

json ×1

key ×1

lambda ×1

memory-management ×1

regex ×1

sockets ×1

sqlalchemy ×1

string ×1

vector ×1