Python Numba和键盘中断异常冲突

Python Numba和键盘中断异常冲突,python,exception,python-3.4,jit,numba,Python,Exception,Python 3.4,Jit,Numba,使用Continuum Numba模块编译键盘中断时遇到问题。这是我的数据采集代码: @jit def lockinmeasurement(x): Measurement=np.empty((0,5)) XMeas=np.empty((0,2)) event_handler = LoggingEventHandler() observer = Observer() observer.schedule(event_handler, path_to_watch

使用Continuum Numba模块编译键盘中断时遇到问题。这是我的数据采集代码:

@jit
def lockinmeasurement(x):
    Measurement=np.empty((0,5))
    XMeas=np.empty((0,2))
    event_handler = LoggingEventHandler()
    observer = Observer()
    observer.schedule(event_handler, path_to_watch, recursive=True)
    observer.start()
    try:
       while x:
           SQData=pd.read_csv(path_to_watch,sep=',',skiprows=14)
           Temp=SQData['Temperature (K)']
           Field=SQData['Field (Oe)']
           XMeas=np.append(XMeas,[[time.clock(),lockin.x]],axis=0)
           Measurement=np.append(Measurement,[[a,b,c,d,e]])
           p1.plot(XMeas,clear=True,label='Lockin X',pen='y')
           pg.QtGui.QApplication.processEvents()    
           rd=pd.DataFrame(Measurement)
           rd.to_csv('fileout.csv',sep='\t',index=False)
           time.sleep(0.2)
    except KeyboardInterrupt:
       print('interrupted!')

lockinmeasurement(True)
代码在没有“
@jit
”的情况下编译得非常好,但是当我尝试使用
numba
时,它返回一个错误:

Traceback (most recent call last):
  File "C:\Anaconda3\lib\site-packages\numba\bytecode.py", line 231, in next
    info = BYTECODE_TABLE[opcode]
KeyError: 121

During handling of the above exception, another exception occurred:

lockinmeasurement(True)

  File "C:\Anaconda3\lib\site-packages\numba\dispatcher.py", line 165, in _compile_for_args
    return self.compile(sig)

  File "C:\Anaconda3\lib\site-packages\numba\dispatcher.py", line 303, in compile
    flags=flags, locals=self.locals)

  File "C:\Anaconda3\lib\site-packages\numba\compiler.py", line 595, in compile_extra
    return pipeline.compile_extra(func)

  File "C:\Anaconda3\lib\site-packages\numba\compiler.py", line 316, in compile_extra
    raise e

  File "C:\Anaconda3\lib\site-packages\numba\compiler.py", line 311, in compile_extra

    bc = self.extract_bytecode(func)
  File "C:\Anaconda3\lib\site-packages\numba\compiler.py", line 303, in extract_bytecode

    bc = bytecode.ByteCode(func=self.func)

  File "C:\Anaconda3\lib\site-packages\numba\bytecode.py", line 333, in __init__
    table = utils.SortedMap(ByteCodeIter(code))

  File "C:\Anaconda3\lib\site-packages\numba\utils.py", line 109, in __init__
    for i, (k, v) in enumerate(sorted(seq)):

  File "C:\Anaconda3\lib\site-packages\numba\bytecode.py", line 235, in next
    raise NotImplementedError(ts % tv)

NotImplementedError: offset=80 opcode=0x79 opname=SETUP_EXCEPT

我有没有办法克服这个问题

多亏了特拉维斯“创新团队”的努力
numba
是一款强大的科学计算工具。然而,在可行的情况下,如果jit能给我们的艰难和快速的生活带来一些成果,我们应该谨慎地使用它

Numba文档明确说明了这一点,并指出:

2.4.1.1。构造 Numba努力支持尽可能多的Python语言,但在Numba编译函数中,有些语言功能不可用:

-Function definition

- 类定义

- 异常处理
(try..except,try..finally)


- 上下文管理(带有语句的


- 理解(列表
dict
set
或生成器理解)

- 生成器委托(
收益率
from)


raise
语句有几种形式支持:

raise
(重新引发当前异常)
引发一些异常

raisesomeexception()
:在
nopython
模式下,构造函数参数必须是编译时常量

类似地,无论是否有错误消息,都支持断言语句


代码的格式非常混乱(不知道缩进应该在哪里),但据我推测,numba jit对您并没有多大帮助。它不会加快任意python代码的速度,只会为使用标量和numpy数组(而不是pandas)的数字内容提供良好的结果。我想你用错了。