我现在已经习惯了这个想法很长一段时间了,但是没有看到有关人们这样做的任何信息.我有一个小网站项目,我需要加载和修改1个对象.这个对象非常简单,不应超过几kb.为什么不使用pickle和/或shelve保存这些数据并加载它,而不是为这么少量的数据运行数据库?我打算在项目中使用像Bottle或Flask这样的微型Web框架.
是否有任何理由不使用此方法加载数据?它只会在Apache启动时加载pickle文件,因此我认为速度不会受到影响(比查询数据库更快).
感谢您的任何意见!
嗯,我认为问题本身很简单......
在Team Foundation 2010中,是否可以以某种方式将搁置集链接到工作项?
如果是这样,当开发人员上架并与相应的工作项关联时,是否可以自动创建此链接?
我们正在处理大量货架,一段时间后可能会变得混乱,因此查询我们待处理的工作项目并了解与手头任务相关的货架会加快进度.
是否可以在每次搁置工作并关联工作项时更改工作项状态?
最后但并非最不重要的是,是否可以查询链接到货架的所有工作项?(假设我们可以链接它们)
提前致谢!
〜
我被分配了读取.txt文件的任务,该文件是各种事件的日志,并将一些事件写入字典.
问题是该文件有时可能大于3GB.这意味着字典太大而无法放入主内存中.Shelve似乎是解决这个问题的好方法.但是,由于我将不断修改字典,我必须writeback启用该选项.这是我担心的地方 - 教程说这会减慢读/写过程并使用更多内存,但我无法找到有关速度和内存如何受影响的统计信息.
任何人都可以澄清读/写速度和内存受到多大影响,以便我可以决定是使用回写选项还是牺牲一些可读性来提高代码效率?
谢谢
如果我正在处理一些我不想提交的文件,我只需保存它们.然后,我有其他文件要推送到服务器,但是如果其他人对存储库进行了更改,我将它们拉下来,它会要求我合并或重新绑定.. 但这些选项中的任何一个都会导致我丢失我的我没有提交的本地更改.
其他人在做什么来解决这个问题?我发现搁架扩展的文档难以理解.
注意:我正在使用Mercurial Eclipse来推送文件到服务器或从服务器中提取文件.
任何解释都将非常感谢!谢谢!
例:
我在Mercurial Eclipse的网站上工作.我有一个新文件夹和新文件,我不想提交到服务器.我还修改了一些现有文件,我不想让这些更改生效.
然后在我的网站上的某些内容中断,我需要修复它,它不会让我修复它没有变形或与最新的回购提示合并,这将导致我失去我所有未提交的更改.
如果我不想丢失它,我应该如何处理我编辑的新文件夹和文件?重新克隆似乎很乏味.将文件复制到新文件夹似乎也很乏味.我确信Shelving或MQ会做我想做的事情,我只是不知道如何去做.
可以说我有一个很大的,100兆字节的字典,我想把它放到磁盘上.我正在使用pypar来利用MPI生成主列表的清理位.实现这一目标的最佳方法是什么?例:
# much earlier
masterDict = shelve.open( 'aShelveFile' )
# .. . . . .
# then we work out which parts of masterDict to keep
# and we put into aCleanDict
# then use mpi pypar to send the cleaned bits to the master rank
if pypar.rank() == 0:
tempdict = {}
for p in range(1,pypar.size()):
tempdict.append(pypar.receive(p))
for l1 in tempdict:
for l2 in l1:
realDict.append(l2)
for p in range(1,pypar.size()):
pypar.send(realDict,p)
# now realDict has all the cleaned bits …Run Code Online (Sandbox Code Playgroud) 我试图在Python中创建一个简单的密码存储程序,它看起来很简单,所以我想知道我是否使用搁置错误.
我有主.py文件:
import shelve
passwords = shelve.open('./passwords_dict.py')
choice = raw_input("Add password (a) or choose site (c)?")
if choice[0] == 'a':
site_key = raw_input("Add for which site? ").lower()
userpass = raw_input("Add any info such as username, email, or passwords: ")
passwords[site_key] = userpass
else:
site = raw_input("Which site? ").lower()
if site in passwords:
print "Info for " + site + ": " + passwords[site]
else:
print site, "doesn't seem to exist!"
print "Done!"
passwords.close()
Run Code Online (Sandbox Code Playgroud)
而另一个文件passwords_dict.py只是一个空字典.
但是当我尝试运行该程序时,我收到此错误:
Traceback (most recent call last): …Run Code Online (Sandbox Code Playgroud) 我只是尝试了一个Python 搁置模块作为从外部服务获取的数据的持久缓存.完整的例子就在这里.
我想知道如果我想让这个多进程安全,最好的方法是什么?我知道redis,memcached和这样的"真正的解决方案",但是我只想使用Python标准库的部分或非常小的依赖性来保持我的代码紧凑,并且在单个进程中运行代码时不会引入不必要的复杂性 - 单线程模型.
很容易想出一个单进程解决方案,但这不适用于当前的Python Web运行时.具体来说,问题在于Apache + mod_wsgi环境
只有一个进程正在更新缓存数据一次(文件锁,不知何故?)
其他进程在更新过程中使用缓存的数据
如果进程无法更新缓存数据,那么在另一个进程可以再次尝试之前会有N分钟的惩罚(以防止雷鸣般的群体等) - 如何在mod_wsgi进程之间发出信号
您没有使用任何"重工具",只有Python标准库和UNIX
此外,如果一些PyPi包没有外部依赖性,请告诉我.欢迎使用替代方法和建议,例如"只使用sqlite".
例:
import datetime
import os
import shelve
import logging
logger = logging.getLogger(__name__)
class Converter:
def __init__(self, fpath):
self.last_updated = None
self.data = None
self.data = shelve.open(fpath)
if os.path.exists(fpath):
self.last_updated = datetime.datetime.fromtimestamp(os.path.getmtime(fpath))
def convert(self, source, target, amount, update=True, determiner="24h_avg"):
# Do something with cached data
pass
def is_up_to_date(self):
if not self.last_updated:
return False
return datetime.datetime.now() < self.last_updated + self.refresh_delay
def …Run Code Online (Sandbox Code Playgroud) 我创建了一个名为foo_module.py包含以下代码的文件:
import shelve, whichdb, os
from foo_package.g import g
g.shelf = shelve.open("foo_path")
g.shelf.close()
print whichdb.whichdb("foo_path") # => dbhash
os.remove("foo_path")
Run Code Online (Sandbox Code Playgroud)
在该文件旁边,我创建了一个名为foo_packagethan 的目录,其中包含一个空__init__.py文件和一个名为g.pyjust 的文件:
class g:
pass
Run Code Online (Sandbox Code Playgroud)
现在,当我运行时,foo_module.py我得到一个奇怪的错误消息:
Exception TypeError: "'NoneType' object is not callable" in ignored
但是,如果我将目录重命名foo_package为foo,并更改导入行foo_module.py,我不会收到任何错误.Wtf在这里发生了什么?
在WinXP上运行Python 2.6.4.