Python Linux Time命令导致多上下文With语句异常 背景
我使用Python2.7.6与Python Linux Time命令导致多上下文With语句异常 背景,python,python-2.7,profiling,multiprocessing,shelve,Python,Python 2.7,Profiling,Multiprocessing,Shelve,我使用Python2.7.6与多处理模块并行解析非常大的文件块(20+GB)。我让工作进程从输入文件中提取信息,并将结果放在一个搁置的字典中以供以后处理。为了防止同时写入伪数据库,我使用了托管锁。我还为数据库访问实现了一个上下文管理器,以确保它始终处于关闭状态,因为在Python 3.4之前,shelve模块本机不支持上下文管理器功能 问题 我想用Linux-time命令测量总体运行时间。但是,当我使用time命令运行脚本时,我会得到一个SyntaxError异常,如果我正常运行它,则不会得到该
多处理
模块并行解析非常大的文件块(20+GB)。我让工作进程从输入文件中提取信息,并将结果放在一个搁置的字典中以供以后处理。为了防止同时写入伪数据库,我使用了托管锁。我还为数据库访问实现了一个上下文管理器,以确保它始终处于关闭状态,因为在Python 3.4之前,shelve
模块本机不支持上下文管理器功能
问题
我想用Linux-time命令测量总体运行时间。但是,当我使用time命令运行脚本时,我会得到一个SyntaxError异常,如果我正常运行它,则不会得到该异常。示例代码:
import multiprocessing
import shelve
from contextlib import contextmanager
DB_NAME = 'temp_db'
# manually implemented context manager - not natively implemented until Python 3.4
# I could use contextlib.closing, but this method makes the "with" statements cleaner
@contextmanager
def open_db(db_name, flag='c'):
db = shelve.open(db_name, flag=flag)
try:
yield db
finally:
db.close()
db_lock = multiprocessing.Manager().Lock()
with db_lock, open_db(DB_NAME) as db:
db['1'] = 'test_value1'
db['2'] = 1.5
with db_lock, open_db(DB_NAME) as db:
for key, val in db.iteritems():
print("{0} : {1}\n".format(key, val))
运行python test\u script.py
将生成预期的输出:
2:1.5
1:测试值1
另一方面,运行time python test_script.py
会导致异常:
文件“test_script.py”,第21行使用db_lock,以db:
^
语法错误:无效语法
0.005u 0.002s 0:00.01 0.0%0+0K0+0io 0pf+0w 问题 为什么time命令会影响解释器认为有效的语法 其他注释
with
语句中的逗号引起的某种原因导致了
python
可执行文件(和版本)的更改。请尝试以下命令:
which python
python -V
time which python
time python -V
对于整个项目,考虑每个工作人员将数据返回给父级,然后将其存储在文件或数据库中。这简化了代码,因为您不需要锁定——只有家长有权访问。好的呼叫,我的好先生。我的shell将python命令别名为python2.7.6的网络安装,而time命令在python2.6的本地安装上执行脚本,这不允许使用一个
with
语句输入多个上下文。