我编写了一些代码,用于使用python库threading.Timer
定期运行某些函数。它使用一些外部类:
class MyClass:
def __init__(self, session):
self.session = session # session is an external class instance
def doPeriodically(self):
self.session.open_spectrum(spectrum_file) # open spectrum file using session
t = threading.Timer(5, self.doPeriodically, [], {}) # set up a timer
def startPeriodicJob(self):
self.doPeriodically()
mc = MyClass(session)
mc.startPeriodicJob()
我用ubuntu13.10、python2.7.5+和Tkinter版本81008在我的笔记本电脑上运行我的扩展,一切都运行得很好。但是当我用Ubuntu12.04 LTS和Python2.7.3以及Tkinter修订版81008将相同的代码复制到桌面上时,代码总是会出错(见下文)。你知道吗
但请注意:我的代码是对sparky的扩展,其中包含python2.4.2。因此,代码应该由python2.4.2来解释。它也可以在下面的错误消息中看到。你知道吗
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/local/src/sparky/platforms/linux-2.6.9/python-2.4.2/lib/python2.4/threading.py", line 442, in __bootstrap
self.run()
File "/usr/local/src/sparky/platforms/linux-2.6.9/python-2.4.2/lib/python2.4/threading.py", line 605, in run
self.function(*self.args, **self.kwargs)
File "/path/to/my/own/code/MyClass.py", line 64, in doPeriodically
self.session.do_jobs()
Error: session 0 not found
我的计算机上不存在到Python2.4.2的路径。它是从预编译的二进制程序,我写的扩展。你知道吗
问题是,代码在一台计算机上运行得很好,但在另一台计算机上却不行。似乎是程序中附带的python2.4.2解释了我的扩展(我的班级.py),因此这两台计算机上的python版本不应该在这里起作用。你知道吗
有什么问题吗?不同的线程可以使用同一个会话实例来执行其成员函数吗?你知道吗
如果我将会话实例传递给函数:
class MyClass:
def __init__(self, session):
self.session = session # session is an external class instance
def doPeriodically(self, sess):
sess.open_spectrum(spectrum_file) # open spectrum file using session
t = threading.Timer(5, self.doPeriodically, [sess,]) # set up a timer
def startPeriodicJob(self):
self.doPeriodically(self.session)
mc = MyClass(session)
mc.startPeriodicJob()
会话类可以在sparky包中找到: https://www.cgl.ucsf.edu/home/sparky/
目前没有回答
相关问题 更多 >
编程相关推荐