【发布时间】:2015-07-28 09:36:45
【问题描述】:
我正在尝试对我的一种通常可以正常工作的方法应用超时。我已经在简单的打印功能上尝试了这段代码,一切正常,但现在我遇到了错误。你能告诉我问题出在哪里吗?
方法self.check_flights 应该运行最大__TIMEOUT__ 秒。
下面的代码在一个类some_class中的方法中
try:
p = multiprocessing.Process(target=self.check_flights, args=(destination, start_date , end_date_2))
p.start()
p.join(__TIMEOUT__)
if p.is_alive():
print 'TIMEOUT'
p.terminate()
p.join()
except Exception as e:
raise e
>ERROR: pickle.PicklingError: Can't pickle <class __main__.some_class at 0x02DD10A0>: it's not the same object as __main__.some_class
编辑:这个超时解决方案来自THIS SO answer
编辑2:为了详细说明,我附上了另一行错误:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Python27\lib\multiprocessing\forking.py", line 381, in main
self = load(from_parent)
File "C:\Python27\lib\pickle.py", line 1378, in load
return Unpickler(file).load()
File "C:\Python27\lib\pickle.py", line 858, in load
dispatch[key](self)
File "C:\Python27\lib\pickle.py", line 880, in load_eof
raise EOFError
EOFError
【问题讨论】:
-
你能复制/粘贴或以某种方式分享完整的课程吗?
-
你用过
if __name__ == '__main__':吗? -
@GyörgySolymosi 是的,我确实使用过它。这是整个代码pastebin.com/uG0qSvhU
标签: python multithreading exception pickle