Python Linux Time命令导致多上下文With语句异常 背景

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异常,如果我正常运行它,则不会得到该

我使用Python2.7.6与
多处理
模块并行解析非常大的文件块(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命令会影响解释器认为有效的语法

其他注释
  • 我假设time命令被正确调用,因为它确实生成了计时信息,并且异常的存在表明解释器正在找到正确的脚本
  • 如果我消除锁的获取或数据库打开,异常就会消失,因此问题似乎是由
    with
    语句中的逗号引起的

  • 某种原因导致了
    python
    可执行文件(和版本)的更改。请尝试以下命令:

    which python
    python -V
    
    time which python
    time python -V
    

    对于整个项目,考虑每个工作人员将数据返回给父级,然后将其存储在文件或数据库中。这简化了代码,因为您不需要锁定——只有家长有权访问。

    好的呼叫,我的好先生。我的shell将python命令别名为python2.7.6的网络安装,而time命令在python2.6的本地安装上执行脚本,这不允许使用一个
    with
    语句输入多个上下文。