小编zch*_*odd的帖子

python多处理pickle协议

我正在使用Python多处理模块将对象放入队列并让它们由多个工作人员处理.我的第一个问题是获取绑定的实例方法,我已经工作了,但现在我遇到了由对象使用的事实引起的单独问题__slots__.

当mp模块去腌制对象时,它似乎使用了旧的ascii pickle协议,无法处理__slots__.较新的协议确实处理了这个问题,但我不确定如何让mp模块使用这个协议.

有人对此有经验吗?

python multiprocessing

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

Android Multipart上传

作为我的Android应用程序的一部分,我想上传要远程存储的位图.我有简单的HTTP GET和POST通信工作完美,但有关如何进行多部分POST的文档似乎与独角兽一样罕见.

此外,我想直接从内存传输图像,而不是使用文件.在下面的示例代码中,我从一个文件中获取一个字节数组,以便稍后使用HttpClient和MultipartEntity.

    File input = new File("climb.jpg");
    byte[] data = new byte[(int)input.length()];
    FileInputStream fis = new FileInputStream(input);
    fis.read(data);

    ByteArrayPartSource baps = new ByteArrayPartSource(input.getName(), data);
Run Code Online (Sandbox Code Playgroud)

这一切对我来说都是相当清楚的,除了我不能为我的生活找到从哪里得到这个ByteArrayPartSource.我已链接到httpclient和httpmime JAR文件,但没有骰子.我听说HttpClient 3.x和4.x之间的包结构发生了巨大的变化.

是否有人在Android中使用此ByteArrayPartSource,他们是如何导入的?

在浏览文档并搜索互联网之后,我想出了一些符合我需求的东西.要创建一个多部分请求,例如表单POST,以下代码为我做了诀窍:

    File input = new File("climb.jpg");

    DefaultHttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost("http://localhost:3000/routes");
    MultipartEntity multi = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
    String line;

    multi.addPart("name", new StringBody("test"));
    multi.addPart("grade", new StringBody("test"));
    multi.addPart("quality", new StringBody("test"));
    multi.addPart("latitude", new StringBody("40.74"));
    multi.addPart("longitude", new StringBody("40.74"));
    multi.addPart("photo", new FileBody(input));
    post.setEntity(multi);

    HttpResponse resp = client.execute(post);
Run Code Online (Sandbox Code Playgroud)

HTTPMultipartMode.BROWSER_COMPATIBLE位非常重要.感谢Radomir关于此的博客.

android multipart http-status-code-404

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

C内存泄漏,尽管免费

在用Valgrind调试我的程序时,我发现了一个内存泄漏,尽管我认为是有效的免费调用.首先,分配内存并存储它的代码:

    row = malloc(sizeof(Row));
    row->columns = malloc(sizeof(char*) * headcnt);
    row->numcol  = 0;

    ...

    row->numcol    = colcnt;
    rows           = realloc(rows, (rowcnt+1) * sizeof(Row));
    rows[rowcnt++] = *row;
Run Code Online (Sandbox Code Playgroud)

负责尝试释放内存的代码:

void cleanUp(){
    int i = 0;
    int j = 0;

    for (i = 0; i < rowcnt; i++){
        for (j = 0; j < rows[i].numcols; j++){
            free(rows[i].columns[j]);
        }
        free(&rows[i]);
    }
    free(rows); 
    exit(0);
}
Run Code Online (Sandbox Code Playgroud)

Row的声明:

typedef struct {
    char** columns;
    unsigned short int numcol;
} Row;

Row* rows = NULL;
Run Code Online (Sandbox Code Playgroud)

更糟糕的是,这个程序有时会导致glibc错误,free(&rows[i])因为抱怨双重免费.我是C的新手,并且会感谢有人可能提出的任何指针(咳咳).

c memory valgrind pointers

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

将python脚本参数传递给测试模块

我有几个测试模块都通过驱动程序脚本一起调用,可以采用各种参数.测试本身是使用python unittest模块编写的.

import optparse
import unittest
import sys
import os

from tests import testvalidator
from tests import testmodifier
from tests import testimporter

#modify the path so that the test modules under /tests have access to the project root
sys.path.insert(0, os.path.dirname(__file__))

def run(verbosity):
    if verbosity == "0":
            sys.stdout = open(os.devnull, 'w')

    test_suite = unittest.TestSuite()
    test_suite.addTest(unittest.TestLoader().loadTestsFromTestCase(testvalidator.TestValidator))
    test_suite.addTest(unittest.TestLoader().loadTestsFromTestCase(testmodifier.TestModifier))
    test_suite.addTest(unittest.TestLoader().loadTestsFromTestCase(testimporter.TestDataImporter))

    unittest.TextTestRunner(verbosity=int(verbosity)).run(test_suite)

if __name__ == "__main__":

    #a simple way to control output verbosity
    parser = optparse.OptionParser()
    parser.add_option("--verbosity", "--verbosity", dest="verbosity", default="0")
    (options, args) = parser.parse_args()

    run(options.verbosity) …
Run Code Online (Sandbox Code Playgroud)

python unit-testing

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

试图理解ruby语法的具体位

我是Ruby和Rails的新手,当我浏览各种教程时,我偶尔会遇到一些我无法理解的Ruby语法.

例如,这实际上是做什么的?

root to: "welcome#index"
Run Code Online (Sandbox Code Playgroud)

我可以认为这可能是一个名为"root"的方法,但在那之后我就迷失了."To"不是象征,是吗?结肠将在之前,如果在":to"中.这是利用哈希的某种形式的关键字参数吗?在使用ruby1.9.3在irb中尝试时,我无法使这种语法有效.

我知道这可能是一个RTFM问题,但我甚至无法想到谷歌为此做些什么.

谢谢!

我还在玩这种语法,

def func(h)
    puts h[:to]
end

x = { :to => "welcome#index" }
y = :to => "welcome#index"
z = to: "welcome#index" 

func to: "welcome#index"
Run Code Online (Sandbox Code Playgroud)

我看到这个例子只适用于定义"y"和"z"的行.因此,无括号和"冒号后"语法仅在调用方法的上下文中有效?

ruby syntax ruby-on-rails

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

Ubuntu LDFLAGS - 需要

我有一个不能正确链接的C项目,我怀疑这是因为gcc传递给ld程序的--as-needed标志.由于该标志,gcc将*.c文件之前列为选项的任何链接库视为不必要,并且不会链接它们.


PREFIX?=/usr/local
CFLAGS=-D_LARGEFILE64_SOURCE=1 -g -Wall -I${PREFIX}/apr/include/apr-1  -I${PREFIX}/apr/include/apr-util-1
LDFLAGS=-lapr-1 -pthread -laprutil-1

all: devpkg
devpkg: bstrlib.o db.o shell.o commands.o 
install: all
    install -d $(DESTDIR)/$(PREFIX)/bin/
    install devpkg $(DESTDIR)/$(PREFIX)/bin/

clean:
    rm -f *.o
    rm -f devpkg
    rm -rf *.dSYM
Run Code Online (Sandbox Code Playgroud)

当我运行这个makefile时,我得到以下内容.


cc -D_LARGEFILE64_SOURCE=1 -g -Wall -I/usr/local/apr/include/apr-1  -I/usr/local/apr/include/apr-util-1   -c -o bstrlib.o bstrlib.c
cc -D_LARGEFILE64_SOURCE=1 -g -Wall -I/usr/local/apr/include/apr-1  -I/usr/local/apr/include/apr-util-1   -c -o db.o db.c
cc -D_LARGEFILE64_SOURCE=1 -g -Wall -I/usr/local/apr/include/apr-1  -I/usr/local/apr/include/apr-util-1   -c -o shell.o shell.c
cc -D_LARGEFILE64_SOURCE=1 -g -Wall -I/usr/local/apr/include/apr-1  -I/usr/local/apr/include/apr-util-1   -c -o commands.o commands.c
cc -D_LARGEFILE64_SOURCE=1 -g -Wall …
Run Code Online (Sandbox Code Playgroud)

makefile

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

SQLAlchemy 返回带有限制/偏移量的意外结果

我有一个查询执行多个左连接,然后执行限制/偏移以实现分页目的。我的问题是,限制/偏移量似乎应用于执行所有联接后返回的总行数。我想要的是将限制/偏移应用于从查询返回的 ORM 实例的数量。

这是一个示例查询:

result = session.query(A)\
.outerjoin(B)\
.outerjoin(C)\
.order_by(A.id)\
.offset(0).limit(100).all()
Run Code Online (Sandbox Code Playgroud)

因此,如果 A 通过连接表 B 与 C 具有一对多关系,我可能会在 A 中每行获得 N 行。是否需要做一些特殊的事情,以便将限制/偏移应用于 A 实例的计数,而不是连接产生了多少行?

python sqlalchemy

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

Python参考

我遇到过一种情况,我认为这种情况在理解引用如何在Python中工作方面存在差距.

假设我们有两个类:

class A:
    def __init__(self):
        self.x = [1,2,3]

    def modify(self):
        self.x.append(4)

    def reset(self):
        self.x = []

class B:
    def __init__(self, x):
        self._x = x

    def say(self):
        print self._x




a = A()
b = B(a.x)

b.say()
a.modify()
b.say()
a.reset()
b.say()
Run Code Online (Sandbox Code Playgroud)

我预期的输出是:

[1, 2, 3]
[1, 2, 3, 4]
[]
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

似乎当我打电话reset()并设置self.x为新列表时,所持有的引用B变得独立并继续存在,从而成为副本而不是引用.这是正确的理解吗?

python list

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