小编use*_*114的帖子

使用express.js的静态文件

我想将服务index.html/media子目录作为静态文件.索引文件应该在/index.html/URL处提供.

我有

web_server.use("/media", express.static(__dirname + '/media'));
web_server.use("/", express.static(__dirname));
Run Code Online (Sandbox Code Playgroud)

但第二行显然服务于整个__dirname,包括其中的所有文件(不只是index.htmlmedia),我不想要.

我也试过了

web_server.use("/", express.static(__dirname + '/index.html'));
Run Code Online (Sandbox Code Playgroud)

但访问基本URL /然后导致对web_server/index.html/index.html(双index.html组件)的请求,当然这会失败.

有任何想法吗?


顺便说一句,我可以在Express中找到关于这个主题的绝对文档(static()+它的参数)......令人沮丧.文档链接也是受欢迎的.

node.js express

195
推荐指数
7
解决办法
30万
查看次数

使用express.js代理

为了避免同域AJAX问题,我希望我的node.js Web服务器将所有请求从URL转发/api/BLABLA到另一个服务器,例如other_domain.com:3000/BLABLA,并且透明地向用户返回该远程服务器返回的相同内容.

所有其他URL(旁边/api/*)将直接提供,不代理.

如何使用node.js + express.js实现此目的?你能给出一个简单的代码示例吗?

(Web服务器和远程3000服务器都在我的控制之下,都运行带有express.js的node.js)


到目前为止,我发现了这个https://github.com/nodejitsu/node-http-proxy/,但阅读那里的文档并没有让我更聪明.我结束了

var proxy = new httpProxy.RoutingProxy();
app.all("/api/*", function(req, res) {
    console.log("old request url " + req.url)
    req.url = '/' + req.url.split('/').slice(2).join('/'); // remove the '/api' part
    console.log("new request url " + req.url)
    proxy.proxyRequest(req, res, {
        host: "other_domain.com",
        port: 3000
    });
});
Run Code Online (Sandbox Code Playgroud)

但没有任何东西返回原始的Web服务器(或最终用户),所以没有运气.

proxy reverse-proxy node.js express

148
推荐指数
7
解决办法
12万
查看次数

将seaborn情节传奇移到另一个位置?

我正在使用factorplot(kind="bar")seaborn.

情节很好,除了传说是错位的:右边太多,文字从情节的阴影区域出来.

如何让seaborn将传奇置于其他地方,例如左上角而不是右中角?

python seaborn

38
推荐指数
5
解决办法
7万
查看次数

如何处理node.js中的代码异常?

我浏览了Express的文档,描述错误处理的部分对我来说完全不透明.

我认为app他们指的是一个实例createServer(),对吧?但我不知道如何在处理请求期间发生异常时阻止node.js炸毁应用程序进程.

我真的不需要任何花哨的东西; 只要有异常,我只想返回500的状态,加上一个空的响应.节点进程不能仅因为某处存在未捕获的异常终止.

有一个如何实现这个的简单例子吗?


var express = require('express');
var http = require('http');

var app = express.createServer();

app.get('/', function(req, res){
    console.log("debug", "calling")
    var options = {
        host: 'www.google.com',
        port: 80,
        path: "/"
    };
    http.get(options, function(response) {
       response.on("data", function(chunk) {
           console.log("data: " + chunk);
           chunk.call(); // no such method; throws here
       });
    }).on('error', function(e) {
       console.log("error connecting" + e.message);
    });
});

app.configure(function(){
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.listen(3000);
Run Code Online (Sandbox Code Playgroud)

崩溃整个应用程序,产生追溯 …

node.js express

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

使用大数据进行多处理

multiprocessing.Pool()用来并行化一些繁重的计算.

目标函数返回大量数据(一个巨大的列表).我的RAM用完了.

如果没有multiprocessing,我只需将目标函数更改为生成器,通过逐个yield计算结果元素.

我理解多处理不支持生成器 - 它等待整个输出并立即返回它,对吧?没有屈服.有没有办法让Pool工作人员在数据可用时立即生成数据,而无需在RAM中构建整个结果数组?

简单的例子:

def target_fnc(arg):
   result = []
   for i in xrange(1000000):
       result.append('dvsdbdfbngd') # <== would like to just use yield!
   return result

def process_args(some_args):
    pool = Pool(16)
    for result in pool.imap_unordered(target_fnc, some_args):
        for element in result:
            yield element
Run Code Online (Sandbox Code Playgroud)

这是Python 2.7.

python generator multiprocessing

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

numpy与多处理和mmap

我正在使用Python的multiprocessing模块并行处理大型numpy数组.numpy.load(mmap_mode='r')在主进程中使用内存映射数组.在那之后,multiprocessing.Pool()分叉过程(我推测).

一切似乎都很好,除了我得到的行:

AttributeError("'NoneType' object has no attribute 'tell'",)
  in `<bound method memmap.__del__ of
       memmap([ 0.57735026,  0.57735026,  0.57735026,  0.        ,  0.        ,        0.        ,  0.        ,  0.        ,  0.        ,  0.        ,        0.        ,  0.        ], dtype=float32)>`
     ignored
Run Code Online (Sandbox Code Playgroud)

在unittest日志中.尽管如此,测试仍然没有通过.

知道那里发生了什么吗?

使用Python 2.7.2,OS X,NumPy 1.6.1.


更新:

经过一些调试后,我把原因归结为一个代码路径,该代码路径使用这个内存映射的numpy数组(一小部分)作为Pool.imap调用的输入.

显然,"问题"是multiprocessing.Pool.imap通过将输入传递给新进程的方式:它使用pickle.这不适用于mmaped numpy数组,而内部的某些内容会导致错误.

我发现Robert Kern的回复似乎解决了同样的问题.他建议为imap输入来自内存映射数组时创建一个特殊的代码路径:在生成的进程中手动映射同一个数组.

这将是如此复杂和丑陋,我宁愿忍受错误和额外的内存副本.有没有其他方法可以更轻松地修改现有代码?

python mmap numpy multiprocessing

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

Python的多处理和内存

multiprocessing.imap_unordered用来对值列表执行计算:

def process_parallel(fnc, some_list):
    pool = multiprocessing.Pool()
    for result in pool.imap_unordered(fnc, some_list):
        for x in result:
            yield x
    pool.terminate()
Run Code Online (Sandbox Code Playgroud)

每次调用都会根据设计fnc返回一个HUGE对象.我可以在RAM中存储这种对象的N个实例,其中N~cpu_count,但不多(不是数百).

现在,使用此功能会占用太多内存.记忆完全花在主要过程中,而不是在工人中.

如何imap_unordered存储完成的结果?我的意思是工作人员已经返回但尚未传递给用户的结果.我认为这很聪明,只是根据需要"懒洋洋地"计算它们,但显然不是.

看起来因为我不能process_parallel足够快地消耗结果,所以池会在fnc某个地方内部排队等待这些巨大的物体,然后爆炸.有办法避免这种情况吗?以某种方式限制其内部队列?


我正在使用Python2.7.干杯.

python multiprocessing

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

如何用条形图来衡量Seaborn的y轴?

我正在使用factorplot(kind="bar").

如何缩放y轴,例如使用对数刻度?

我试图修补情节的轴,但这总是以某种方式弄乱了条形图,所以请先尝试你的解决方案,以确保它真的有效.

python seaborn

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

多处理和垃圾收集

在py2.6 +中,multiprocessing模块提供了一个Pool类,因此可以:

class Volatile(object):
    def do_stuff(self, ...):
        pool = multiprocessing.Pool()
        return pool.imap(...)
Run Code Online (Sandbox Code Playgroud)

但是,使用2.7.2的标准Python实现,这种方法很快就会导致"IOError:[Errno 24]打开的文件过多".显然,pool对象永远不会被垃圾收集,因此它的进程永远不会终止,累积内部打开的任何描述符.我认为这是因为以下工作:

class Volatile(object):
    def do_stuff(self, ...):
        pool = multiprocessing.Pool()
        result = pool.map(...)
        pool.terminate()
        return result
Run Code Online (Sandbox Code Playgroud)

我想保持"懒惰"迭代器的方法imap; 在这种情况下垃圾收集器如何工作?如何修复代码?

python unix garbage-collection multiprocessing

12
推荐指数
3
解决办法
6738
查看次数

如何链接SOCKS代理?

我有一个从我的笔记本电脑(机器A)到机器B的工作袜代理:

[A]$ ssh -ND 8888 B

我可以设置firefox在本地端口8888上使用socks代理,并且浏览工作.到现在为止还挺好.

但我在机器B和C之间也有一个袜子代理:

[B]$ ssh -ND 8157 C

所以我可以浏览B,好像我在C.

有没有办法链接两个代理,以便我能够在使用连接到C时本地使用firefox(在A上)?也就是说,以某种方式将所有firefox的socks请求从A转发到C.A和C不能直接看到对方,但我到处都有完全的root ssh访问权限.所有机器都是Debian.

请注意,我不想转发单个端口(如80),我想要一个完整的链式袜子代理.

ssh proxy socks

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