我正在尝试学习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) 我正在尝试使用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()方法创建表,则迭代上面的数据和键.我得到了我期望的相反顺序:

使用以下代码生成:
// 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) 我正在尝试定义一个可以获取范围并将其传递给函数的命令.这是我认为我应该拥有的:
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?我该如何解决?
假设我有一些调用的类__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)
那怎么能A或B告诉他们的超级班object呢?我应该做点什么super(A, cls).__new__ is object.__new__ …
我正在使用一个临时目录,我想确保它在程序关闭时被删除(无论程序是否成功).我正在使用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中,你可以获得正在执行的文件的路径__file__是否有java等价物?
还有一种方法可以获得与您类似的当前包__name__吗?
最后,什么是java内省的好资源?
更新:我已经解决了问题,从日志中,我看到数据库经常打开和关闭.我把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) 我正在编写一个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做错了?
我正在使用一个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)
但是,如果我有一个使用数字而不是数组数据的列,它可以正常工作.我可以解决这个问题,但这很令人困惑,我想知道这是一个错误,还是我做错了什么.我觉得在这里使用数组可能有点边缘,确实不确定它们是否得到支持.想法?
谢谢
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 ×6
aggregation ×1
amazon-s3 ×1
boto3 ×1
c ×1
dom ×1
free ×1
html ×1
html-table ×1
java ×1
javascript ×1
json ×1
malloc ×1
numpy ×1
pandas ×1
pointers ×1
python-3.x ×1
redis ×1
super ×1
vim ×1