小编Med*_*her的帖子

在bash中实现netcat

作为我正在尝试编写的更大脚本的基础,我正在尝试基本上在bash中实现基本的netcat客户端.我当前的脚本技术有效,看起来像这样:

#!/bin/bash

exec 3<>/dev/tcp/$1/$2         

cat <&3 &                      
cat <&1 >3
Run Code Online (Sandbox Code Playgroud)

它的问题是它留下了一个需要被杀死的挂猫过程,但我无法想出一个自动的方法来做到这一点,并且手动运行pkill cat似乎并不真正运动.

bash netcat

5
推荐指数
2
解决办法
1078
查看次数

Erlang热重装和坏人

我有一个设置,我有四个服务器运行实例,每个服务器盒两个实例.我的服务器涉及大量传递匿名函数并在不同的线程(可能在不同的服务器上)运行它们.

今天我做了一个代码重新加载,其中涉及更改其中一个实例上的某些静态函数的内容(计划按顺序执行每个实例).在重新加载后,我遇到了大量的badfun错误.该盒子上的另一个实例也开始喷出类似的错误.另一个盒子上的两个实例我们似乎没有受到影响.

我发现这篇文章:http: //www.javalimit.com/2010/05/passing-funs-to-other-erlang-nodes.html 这似乎意味着这些错误的原因是匿名函数有不同的版本在两个节点之间,因此它破裂了.但是,在测试中我无法重现此错误.此外,我已经多次重新加载代码而没有看到这样的东西.然而,这是我第一次重新加载每个盒子两个实例(以前它是每盒一个实例).有没有人对为什么会发生这种情况有任何见解,也许是如何防止它(没有杀死所有东西并重新启动它,这是我必须要做的).

erlang

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

在函数scala中读取大文件

我正在尝试使用scala处理大型二进制文件.如果可能的话,我想使用功能方法.我的主要方法现在看起来像这样:

def getFromBis( buffer:List[Byte], bis:BufferedInputStream ):(Byte,List[Byte],Boolean) = {
    buffer match {
        case Nil =>
            val buffer2 = new Array[Byte](100000)
            bis.read(buffer2) match {
                case -1 => (-1,Nil,false)
                case _  => 
                    val buffer3 = buffer2.toList
                    (buffer3.head,buffer3.tail,true)
            }
        case b::tail => return (b,tail,true)
    }
}
Run Code Online (Sandbox Code Playgroud)

它需要一个列表缓冲区和一个缓冲的输入流.如果缓冲区不为空,它只返回head和tail,如果它为空,则从文件中获取下一个块,并将其用作缓冲区.

正如您所看到的,这不是很实用.我试图以尽可能少的潜在io调用的方式这样做,这就是为什么我以一种分块的方式做这件事.这里的问题是新的数组.每次我运行该函数时它都会创建一个新数组,并且随着程序运行时不断增加的内存使用情况来判断,我不认为它们会被破坏.

我的问题是:有没有更好的方法来使用scala以分块方式阅读大文件?我想保持一个完全功能性的方法,但至少我需要一个功能,它可以充当我的功能程序的其余部分的黑盒子.

java file-io scala

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

Erlang:对数组进行分布式工作

我正在开发一个项目,我们有一个原子数组作为哈希.每当用户连接到服务器时,都会对某个值进行哈希处理,并将该哈希值用作查找数组中元素的索引,并返回该元素."外部力量"(由长时间运行的gen_server处理)能够更改此数组,因此我不能简单地对其进行硬编码.我的问题是如何"托管"这个数组.

我的第一个实现是一个简单的gen_server,它保存了一个数组的副本并将其发送给任何要求它的人.然后,请求它的过程可以遍历它并获得他们想要的索引.这个实现有大量的内存被使用,我归结为这个相同的数组有很多副本浮动.

我当前的实现有一个中央gen_server来处理这个数组的状态,以及处理实际请求的子节点.当状态改变时,中央gen_server更新子节点.当进程想要找到它的哈希结果时,它会将其索引号发送到中央gen_server,后者将请求转发给其中一个子进程.子进程遍历其"本地"列表,并将生成的原子发送回原始进程.

当前实施的问题在于它在高流量时陷入困境.我已经尝试过越来越多的孩子,但我很确定中央gen_server是瓶颈.

有没有人对我的问题有更好的解决方案?

编辑:%s/array/list/g

arrays erlang distributed-computing

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

带有生成器的WSGI文件流

我有以下代码:

def application(env, start_response):
    path = process(env)
    fh = open(path,'r')
    start_response('200 OK', [('Content-Type','application/octet-stream')])
    return fbuffer(fh,10000)


def fbuffer(f, chunk_size):
    '''Generator to buffer file chunks'''  
    while True:
        chunk = f.read(chunk_size)      
        if not chunk: break
        yield chunk
Run Code Online (Sandbox Code Playgroud)

我不确定它是对的,但是我在互联网上找到的信息碎片让我觉得它应该有效.基本上我想以块的形式流出一个文件,为此,我从我的应用程序函数传回一个生成器.然而,这只打印出标题,并没有实际发回任何数据,任何人都可以告诉我为什么这是?

或者,如果这是完全错误的,那么最好的方法是什么?我无法将整个文件缓冲在内存中,因为我将使用的文件可能是千兆字节.

第三个问题:一旦我输出文件,关闭文件的最佳方法是什么?在我发布的代码中,无论如何我都看不到实际关闭文件.

(我用uWSGI 1.2.4运行python 3.2.3)

python wsgi large-files

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

Python3 关闭 IPC

我有一个奇怪的要求。我们处于需要在我们的 python3.3 worker 和数据库之间运行基于 clojure 的服务的位置。出于这个原因,我正在研究在 python 和 clojure 之间进行交互的不同方法。我查看了 Thrift,但不幸的是它还没有 python3 支持。0mq 看起来也很有趣,但我担心 req/req 模式会阻塞 python3 线程(多个进程上会有多个线程需要使用此代理服务)。

是否还有其他现有的图书馆可以帮助我?在一天结束时,我可以使用 aleph 和原始套接字从头开始编写我自己的服务,但我觉得那样会重新发明轮子太多了。

rpc ipc clojure python-3.x

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

C++:不访问嵌套类的Friend方法

我有以下内容:

using namespace std;

template<class T> class olsm;                 
template<class T> istream& operator>>(istream& in, olsm<T>& x);
template<class T> ostream& operator<<(ostream& out, olsm<T>& x);

template <class T>                                              
class olsm {

    friend istream& operator>> <> (istream& in, olsm& x);
    friend ostream& operator<< <> (ostream& out, olsm& x);

    public:                                
        class node {                           
            public:
        };

        ///Other stuff
};      

////More stuff

template<class T>
ostream& operator<<(ostream& out, olsm<T>& x) {

    olsm<T>::node* rowNode = x;

    //Even more stuff!

    return out;
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试编译时,我得到了,

error: 'rowNode' was not declared in …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors operator-overloading friend

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

Erlang记录到元组列表

我正在尝试制定一个将记录转换为元组列表的宏定义.就像是:

> Id = #id{id1=1,id2=2,id3=3}.
{id,1,2,3}
> ?record_to_tuplelist(id,Id).
[{id1,1},{id2,2},{id3,3}]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我做了这个:

-define(record_to_tuplelist(Rec,RecRef), [ {X,RecRef#Rec.X} || X <- record_info(fields,Rec) ]).
Run Code Online (Sandbox Code Playgroud)

但它给出了语法错误.如果我将RecRef#Rec.X更改为RecRef#Rec {}它可以工作,但不会返回我想要的内容.这只是一个模糊的语法错误,或者这实际上是不可能的?

erlang records

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

grep、tee 和 sleep 配合得不好

(echo foo && sleep 1 && echo bar) | grep -P . | tee /dev/null
Run Code Online (Sandbox Code Playgroud)

上面的代码是我能想到的最小的问题案例。预期的行为是foo会被回显,一秒钟过去,然后bar会被回显。

实际发生的情况是,一秒钟过去了foo,并bar同时得到回声。如果您删除命令(或两者,显然) greptee则会发生正确的行为。但当他们在一起时,情况就不是这样了。

我认为这是某种缓冲问题,但我不知道如何解决它。对我来说,实际发生的脚本已经运行了很长一段时间,直到最后我才看到任何日志消息。哈普!:(

bash grep tee

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

大型lua号码打印错误

我有以下测试用例:

Lua 5.3.2  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> foo = 1000000000000000000
> bar = foo + 1
> bar
1000000000000000001
> string.format("%.0f", foo)
1000000000000000000
> string.format("%.0f", bar)
1000000000000000000
Run Code Online (Sandbox Code Playgroud)

最后一行应该是1000000000000000001,因为这是价值bar,但由于某种原因,它不是.这不仅适用于1000000000000000000,我还没有找到另一个给出正确值的数字.任何人都可以解释为什么会发生这种情况?

lua int64

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