python threading.Timer在linux计算机上的行为有所不同

时间:2014-02-13 11:21:02

标签: python linux ubuntu

我已经编写了一些代码,用于使用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()

我使用Ubuntu 13.10和python 2.7.5+以及Tkinter版本:81008在笔记本电脑上运行我的扩展,一切运行良好。但是当我使用Ubuntu 12.04 LTS和python 2.7.3以及Tkinter Revision:81008将相同的代码复制到我的桌面时,代码总是会出现错误(见下文)。

但是注意:我的代码是sparky的扩展,它在其中提供了python 2.4.2。因此代码应该由python 2.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

我的计算机上没有python 2.4.2的路径。它来自我编写扩展名的预编译二进制程序。

难题是,代码在一台计算机上运行良好,但在另一台计算机上运行良好。而且似乎是程序中发布的python 2.4.2解释了我的扩展名(MyClass.py),因此两台计算机上的python版本不应该在这里发挥作用。

可能是什么问题?不同的线程可以使用相同的Session实例来执行其成员函数吗?

如果我将Session实例传递给函数

,则无效
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()

PS。 Session类可以在sparky包中找到: https://www.cgl.ucsf.edu/home/sparky/

0 个答案:

没有答案