我想将服务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.html
和media
),我不想要.
我也试过了
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()
+它的参数)......令人沮丧.文档链接也是受欢迎的.
为了避免同域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服务器(或最终用户),所以没有运气.
我正在使用factorplot(kind="bar")
seaborn.
情节很好,除了传说是错位的:右边太多,文字从情节的阴影区域出来.
如何让seaborn将传奇置于其他地方,例如左上角而不是右中角?
我浏览了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)
崩溃整个应用程序,产生追溯 …
我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的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.这不适用于mmap
ed numpy数组,而内部的某些内容会导致错误.
我发现Robert Kern的回复似乎解决了同样的问题.他建议为imap
输入来自内存映射数组时创建一个特殊的代码路径:在生成的进程中手动映射同一个数组.
这将是如此复杂和丑陋,我宁愿忍受错误和额外的内存副本.有没有其他方法可以更轻松地修改现有代码?
我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.干杯.
我正在使用factorplot(kind="bar")
.
如何缩放y轴,例如使用对数刻度?
我试图修补情节的轴,但这总是以某种方式弄乱了条形图,所以请先尝试你的解决方案,以确保它真的有效.
在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
; 在这种情况下垃圾收集器如何工作?如何修复代码?
我有一个从我的笔记本电脑(机器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),我想要一个完整的链式袜子代理.