Ign*_*ona 3 python gps gpsd python-multithreading
我在停止正在执行阻塞操作的线程时遇到问题。我正在编写一个使用gpsd及其python绑定的程序,该Thread的run方法如下所示:
def run(self):
print "inside run. outside while"
global gpsd
while self.running:
print "inside while"
try:
print "before next()"
gpsd.next() #this will continue to loop and grab EACH set of gpsd info to clear the buffer
print "after next()"
self.file_descriptor.write(str(int(time.time())) + ',' + str(gpsd.fix.latitude) + ',' + str(gpsd.fix.longitude) + ',' + str(gpsd.fix.altitude) + ',' + str(gpsd.fix.speed) + '\n')
print "after write"
#self.file_descriptor.write("self.running" + str(self.running) + '\n')
self.file_descriptor.flush()
print "after flush"
time.sleep(5)
print "after sleep"
except:
print "inside thread except"
raise
Run Code Online (Sandbox Code Playgroud)
问题是next()方法正在阻塞,因此即使从我的主线程调用:
print "Stopping GPS thread"
gpsp.running = False
gpsp.join() # wait for the thread to finish what it's doing
Run Code Online (Sandbox Code Playgroud)
当没有GPS修复时,run方法在next()上被阻止,这将不会自行停止...有什么想法吗?如果GPS已修复,则代码工作正常。
非常感谢!
好吧,我想我做到了。gps库具有一种非阻塞方法来检查数据是否可用,因此现在看起来像:
def run(self):
global gpsd
while self.running:
try:
if gpsd.waiting(): #only True if data is available
gpsd.next() #this will continue to loop and grab EACH set of gpsd info to clear the buffer
self.file_descriptor.write(str(int(time.time())) + ',' + str(gpsd.fix.latitude) + ',' + str(gpsd.fix.longitude) + ',' + str(gpsd.fix.altitude) + ',' + str(gpsd.fix.speed) + '\n')
self.file_descriptor.flush()
time.sleep(5)
except:
raise
Run Code Online (Sandbox Code Playgroud)
而且工作正常。谢谢!
| 归档时间: |
|
| 查看次数: |
701 次 |
| 最近记录: |