我使用cPickle来使用HIGHEST_PROTOCOL来挑选整数列表,
cPickle.dump(l, f, HIGHEST_PROTOCOL)
Run Code Online (Sandbox Code Playgroud)
当我尝试使用以下代码解开这个时,我得到一个EOFError.在解开前我尝试'寻找'偏移0,但错误仍然存在.
l = cPickle.load(f)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在尝试使用非常不稳定的索引数据源(论坛,社交网络等)来构建索引/搜索应用程序的原型,这里有一些性能要求,
非常快的周转时间(我的意思是,很快就会在搜索结果中显示任何新数据(例如论坛上的新消息)(不到一分钟))
我需要定期丢弃旧文档,以确保搜索结果没有过时.
最后但同样重要的是,搜索应用程序需要响应.(延迟大约100毫秒,并且应该支持至少10 qps)
所有的我都可以当前/可满足W 0使用Lucene的要求(这将让我满足所有1,2和3)在未来,但我期待其他要求(如搜索相关性等)和Lucene的让我们很容易实行.但是,由于Lucene的设计用于比我目前正在进行的工作复杂得多的用例,因此我很难满足我的性能要求.
这是一些问题,
一个.我读到IndexWriter类中的optimize()方法很昂贵,不应该被频繁更新的应用程序使用,有哪些替代方案?
湾 为了进行增量更新,我需要不断提交新数据,并不断刷新索引阅读器以确保它具有新数据.这些将影响上面的1和3.我应该尝试重复索引吗?解决这个问题的常用方法有哪些?
C.我知道Lucene提供了一个删除方法,它允许你删除所有匹配某个查询的文档,在我的情况下,我需要删除所有早于某个年龄的文档,现在一个选项是为每个文件添加一个日期字段记录并使用它来删除文档.是否可以对文档ID进行范围查询(我可以创建自己的id字段,因为我认为由lucene创建的字段不断变化)来删除文档?它比比较表示为字符串的日期更快吗?
我知道这些是非常开放的问题,所以我不是在寻找详细的答案,我会尽力将你的所有答案视为建议并用它们来告知我的设计.谢谢!如果您需要任何其他信息,请与我们联系.
def start(fileName):
fileReader = open(fileName)
for row in fileReader:
print row,
if __name__ == "__main__":
import sys
if len(sys.argv) <= 1:
print "usage quine /path/to/file"
sys.exit(-1)
fileName = sys.argv[0]
start(fileName)
Run Code Online (Sandbox Code Playgroud)
python quine.py foo
我对Java比较陌生,在尝试使用某些代码时遇到了令我惊讶的事情.希望有人能够对此有所了解.这是与我的问题相关的一些代码片段.那些阅读过编程实践的人可能会觉得这很熟悉.
此函数是为List数据类型定义的,并将传递的"fn"参数(只是包装在对象中的函数)应用于列表的所有成员.
public void apply(MapFunctionI fn, Object fnArg) {
Node curr = head;
for (; curr != null; curr = curr.getNext()){
fn.function(curr.getItem(), fnArg);
}
}
Run Code Online (Sandbox Code Playgroud)
接下来,我尝试使用这个函数来计算列表中元素的数量,使用实现MapFunctionI的类(一个需要一个名为'function'的方法的接口)
class CounterFunction implements MapFunctionI {
public void function(Object node, Object arg){
((MyInteger)arg).increment();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我怎么称呼这个.
static void TestApply(LinkedList l){
System.out.println("Number of elements in List -> ");
MyInteger n = new MyInteger(0);
l.apply(new CounterFunction(),n);
System.out.println(n.value());
}
Run Code Online (Sandbox Code Playgroud)
这是MyInteger类型.
class MyInteger {
private int n;
MyInteger(int i){
n = i;
}
public void increment(){
n++;
}
public …Run Code Online (Sandbox Code Playgroud) 我有一些数据存储在我想要处理的数据库中.数据库访问非常缓慢,因此我决定在进行任何处理之前将所有数据加载到字典中.但是,由于存储的数据量巨大,我得到了一个内存不足的错误(我看到使用了超过2个演出).所以我决定使用磁盘数据结构,并发现使用shelve是一种选择.这是我做的(伪python代码)
def loadData():
if (#dict exists on disk):
d = shelve.open(name)
return d
else:
d = shelve.open(name, writeback=True)
#access DB and write data to dict
# d[key] = value
# or for mutable values
# oldValue = d[key]
# newValue = f(oldValue)
# d[key] = newValue
d.close()
d = shelve.open(name, writeback=True)
return d
Run Code Online (Sandbox Code Playgroud)
我有一些问题,
1)我真的需要writeBack = True吗?它有什么作用?
2)我仍然得到一个OutofMemory异常,因为我没有对数据写入磁盘的时间进行任何控制.我怎么做?我尝试每隔几次迭代执行一次sync(),但这也无济于事.
谢谢!
我尝试了几种方法,我真的只关心性能,而不是正确性.我注意到基于正则表达式的实现比使用类型强制的实现慢约3-4倍.还有另一种更有效的方法吗?
def IsNumber(x):
try:
_ = float(x)
except ValueError:
return False
return True
def IsNumber2(x):
import re
if re.match("^\d*.?\d*$", x) == None:
return False
return True
Run Code Online (Sandbox Code Playgroud)
谢谢!
这篇文章被错误地标记为“发送”,因为我无法创建新标签。
我对这个简单的回显服务器有一个非常基本的问题。这是一些代码片段。
客户
while True:
data = raw_input("Enter data: ")
mySock.sendall(data)
echoedData = mySock.recv(1024)
if not echoedData: break
print echoedData
Run Code Online (Sandbox Code Playgroud)
服务器
while True:
print "Waiting for connection"
(clientSock, address) = serverSock.accept()
print "Entering read loop"
while True:
print "Waiting for data"
data = clientSock.recv(1024)
if not data: break
clientSock.send(data)
clientSock.close()
Run Code Online (Sandbox Code Playgroud)
现在一切正常,除非客户端发送一个空字符串(通过按回车键响应“输入数据:”),在这种情况下我会看到一些死锁行为。
现在,当用户在客户端按下回车键时到底会发生什么?我只能想象,sendall调用会阻塞等待一些数据添加到发送缓冲区,从而导致recv调用依次阻塞。这里发生了什么?
谢谢阅读!
python ×5
coercion ×1
dictionary ×1
eoferror ×1
indexing ×1
integer ×1
java ×1
lucene ×1
parameters ×1
performance ×1
persistence ×1
pickle ×1
quine ×1
recv ×1
regex ×1
send ×1
shelve ×1
sockets ×1