小编Jef*_*ner的帖子

在不同的功能中分配空闲内存?

我正在尝试学习C而我正在尝试编写一个基本的堆栈数据结构,但我似乎无法获得基本malloc/ free正确.

这是我一直在使用的代码(我只是在这里发布一小部分来说明一个特定的问题,而不是总代码,但错误消息是通过运行此示例代码生成的valgrind)

#include <stdio.h>
#include <stdlib.h>

typedef struct Entry {
    struct Entry *previous;
    int value;
} Entry;

void destroyEntry(Entry entry);

int main(int argc, char *argv[])
{
    Entry* apple;
    apple = malloc(sizeof(Entry));
    destroyEntry(*(apple));
    return 0;
}

void destroyEntry(Entry entry)
{
    Entry *entry_ptr = &entry;
    free(entry_ptr);
    return;
}
Run Code Online (Sandbox Code Playgroud)

当我运行它valgrind--leak-check=full --track-origins=yes,我收到以下错误:

==20674== Invalid free() / delete / delete[] / realloc()
==20674==    at 0x4028E58: free (vg_replace_malloc.c:427)
==20674==    by 0x80485B2: destroyEntry (testing.c:53)
==20674==    by 0x8048477: …
Run Code Online (Sandbox Code Playgroud)

c malloc free pointers memory-management

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

如何使用HTMLTableElement.insertRow在表的末尾插入行

背景和设置

我正在尝试使用javascript中的表格数据创建一个表,但是当我尝试将行插入到表元素中时,它会以与我期望的相反的顺序插入,并且使用相反的顺序appendChild.(这是一个jsfiddle与现场演示).

说我有这样的数据:

var data = [
    {"a": 1, "b": 2, "c": 3},
    {"a": 4, "b": 5, "c": 6},
    {"a": 7, "b": 8, "c": 9}
], keys = ["a", "b", "c"];
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用insertRow()insertCell()方法创建表,则迭代上面的数据和键.我得到了我期望的相反顺序:

InsertRows图片

使用以下代码生成:

// insert a table into the DOM
var insertTable = insertDiv.appendChild(document.createElement("table")),
    thead = insertTable.createTHead(), // thead element
    thRow = thead.insertRow(), // trow element
    tbody = insertTable.createTBody(); // tbody element


thRow.insertCell().innerText = "#"; // add row header

// insert columns …
Run Code Online (Sandbox Code Playgroud)

html javascript dom html-table

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

将命令范围传递给函数

我正在尝试定义一个可以获取范围并将其传递给函数的命令.这是我认为我应该拥有的:

function! PrintGivenRange() range
    echo "firstline ".a:firstline." lastline ".a:lastline
    " Do some more things
endfunction

command! -range PassRange call PrintGivenRange()
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用,它似乎只通过第一行.

例如

:1,5PassRange "outputs firstline 1 lastline 1
:1,5call PrintGivenRange() "outputs firstline 1 lastline 5
" if you select lines in visual mode, same thing for both
Run Code Online (Sandbox Code Playgroud)

我已经读过:help command-range但仍然无法解决这个问题.我应该将前缀中的范围传递给call?我该如何解决?

vim

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

确定在Python 3中super().__ new__是否为object .__ new__?

假设我有一些调用的类__new__,如何__new__根据需要调用mro并调用超类(带参数),但不调用object.__new__其他参数?例如,只有在没有向构造函数传递参数时才有效:

class A(object):
    def __new__(cls, *args, **kwargs):
        print("A.__new__ called")
        return super(A, cls).__new__(cls, *args, **kwargs)

class B(object):
    def __new__(cls, *args, **kwargs):
        print("B.__new__ called")
        return super(B, cls).__new__(cls, *args, **kwargs)

class C(A, B): pass

>>> C.mro()
[__main__.C, __main__.A, __main__.B, builtins.object]
>>> C()
A.__new__ called
B.__new__ called
Run Code Online (Sandbox Code Playgroud)

但是使用参数调用会导致它失败(因为在某些时候Python改为object.__new__除了调用者类之外不接受任何参数):

>>> C(1)
A.__new__ called
B.__new__ called
Traceback (most recent call last):
   ...
TypeError: object() takes no parameters
Run Code Online (Sandbox Code Playgroud)

那怎么能AB告诉他们的超级班object呢?我应该做点什么super(A, cls).__new__ is object.__new__ …

python super python-3.x

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

如何管理临时目录,以确保在程序关闭时删除它?

我正在使用一个临时目录,我想确保它在程序关闭时被删除(无论程序是否成功).我正在使用tempfile.mkdtemp创建目录并将创建的字符串放入其子类中str删除其__del__命令中的目录:

import shutil
import tempfile

class TempDir(str):
    """ container for temporary directory. 
    Deletes directory when garbage collected/zero references """
    def __del__(self):
        shutil.rmtree(self.__str__(), onerror=my_error_fn)

dbdir = TempDir(tempfile.mkdtemp())
Run Code Online (Sandbox Code Playgroud)

这是我不确定的:如果程序关闭或发生KeyboardInterrupt,Python会自动删除/垃圾收集所有变量吗?如果没有,我怎么能确保该目录被删除?

有关在Python中创建析构函数方法的相关信息.似乎只要TempDir对象不引用任何其他东西,使用__del__它来破坏它应该没问题.

python garbage-collection

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

python的__file __,_ ____和Object .__ class __.__ name__的java等价物是什么?

在Python中,你可以获得正在执行的文件的路径__file__是否有java等价物?

还有一种方法可以获得与您类似的当前包__name__吗?

最后,什么是java内省的好资源?

java

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

{solve} redis:localhost:6379.无法分配请求的地址

更新:我已经解决了问题,从日志中,我看到数据库经常打开和关闭.我把redis创建放在for循环中.所以...愚蠢的问题,如果有人像我一样记录,请检查循环.

我尝试关闭它并重新启动,但它仍然发生了.这是错误消息:

redis.exceptions.ConnectionError:连接localhost:6379的错误99.无法分配请求的地址.

我试图在redis中插入300000条记录(我的记忆足够大).但是在我插入大约30000条记录后,就会出现错误:

  redis.exceptions.ConnectionError: Error 99 connecting localhost:6379. Cannot assign   requested address.
Run Code Online (Sandbox Code Playgroud)

查看日志文件后,在成功插入30000条记录后,看起来redis已关闭.

以下是我的日志文件的一部分:

[32176] 11 Jun 20:59:27 - Accepted 127.0.0.1:36578
[32176] 11 Jun 20:59:27 - Client closed connection
[32176] 11 Jun 20:59:27 - Accepted 127.0.0.1:52327
[32176] 11 Jun 20:59:27 - Client closed connection
[32176] 11 Jun 20:59:27 - Accepted 127.0.0.1:52367
[32176] 11 Jun 20:59:27 - Client closed connection
[32176] 11 Jun 20:59:27 - Accepted 127.0.0.1:52368
[32176] 11 Jun 20:59:27 - Client closed connection
[32176] 11 Jun 20:59:27 - …
Run Code Online (Sandbox Code Playgroud)

python redis

8
推荐指数
0
解决办法
7929
查看次数

使用python的JSONP Web服务

我正在编写一个AJAX函数,它从我的JSON Python Web服务请求数据.我的AJAX请求如下:

  url = "http://localhost:8001/blah"
  $.ajax({
      url: url,
      type: 'get',
      dataType: 'jsonp',
      success: function(data) {
          console.log('hi')
      }
  });
Run Code Online (Sandbox Code Playgroud)

现在,我的python Web服务有一个函数来处理具有以下return语句的'/ blah'请求:

return json.dumps({'a':1, 'b':2 })
Run Code Online (Sandbox Code Playgroud)

我的AJAX函数没有成功从我的Python Webservice中检索响应,但我没有在Firebug中收到任何错误.什么是我的webservice或javascript做错了?

python json

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

Pandas:当列包含numpy数组时聚合

我正在使用一个pandas DataFrame,其中一列包含numpy数组.当试图通过聚合对该列求和时,我得到一个错误,指出"必须产生聚合值".

例如

import pandas as pd
import numpy as np

DF = pd.DataFrame([[1,np.array([10,20,30])],
               [1,np.array([40,50,60])], 
               [2,np.array([20,30,40])],], columns=['category','arraydata'])
Run Code Online (Sandbox Code Playgroud)

这按照我期望的方式工作:

DF.groupby('category').agg(sum)
Run Code Online (Sandbox Code Playgroud)

输出:

             arraydata
category 1   [50 70 90]
         2   [20 30 40]
Run Code Online (Sandbox Code Playgroud)

但是,由于我的实际数据框有多个数字列,因此不选择arraydata作为聚合的默认列,我必须手动选择它.这是我尝试过的一种方法:

g=DF.groupby('category')
g.agg({'arraydata':sum})
Run Code Online (Sandbox Code Playgroud)

这是另一个:

g=DF.groupby('category')
g['arraydata'].agg(sum)
Run Code Online (Sandbox Code Playgroud)

两者都给出相同的输出:

Exception: must produce aggregated value
Run Code Online (Sandbox Code Playgroud)

但是,如果我有一个使用数字而不是数组数据的列,它可以正常工作.我可以解决这个问题,但这很令人困惑,我想知道这是一个错误,还是我做错了什么.我觉得在这里使用数组可能有点边缘,确实不确定它们是否得到支持.想法?

谢谢

python numpy aggregation pandas

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

使用 boto3 批量复制

Boto3 有一个托管复制方法,它非常适合单个对象。同样,它似乎有一个delete()适用于集合的方法。但是如果我有一组对象(见objects下文),似乎我可以进行批量操作的唯一方法是使用我自己的线程/进程池(为了简单起见,我使用了多处理,但 concurrent.futures 可能是更适合错误处理)。

import boto3
import multiprocessing

bucket_name = '1000genomes'
prefix = 'changelog_details/'
bucket = boto3.resource('s3').Bucket(bucket_name)
objects = bucket.objects.filter(Prefix=prefix).limit(30)
sources = [{'Bucket': o.bucket_name, 'Key': o.key} for o in objects]

target_bucket = 'my-bucket'  # fill in bucket here!

def copy_to_bucket(src, bucket=target_bucket):
    # client is not thread-safe according to docs
    s3 = boto3.resource('s3')
    return s3.meta.client.copy(src, bucket, src['Key'])

pool = multiprocessing.Pool(20)
results = pool.map(copy_to_bucket, sources)
print('Copied %d results' % len(results))
Run Code Online (Sandbox Code Playgroud)

我是否错过了有关如何批量执行此操作的信息?我试图查看 aws-cli 代码库和/或 S3Transfer 类,但它们似乎都专注于上传或下载文件。

如果做不到这一点,是否对线程或进程是更好的选择有什么想法?(我认为大多数服务器端副本将只是等待网络 I/O 无论如何)。

python amazon-s3 amazon-web-services boto3

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