程式执行登入时需要在另一个装置做一些认证
在认证完成前原本程式的 UI 可以取消登入
但是此时做认证的 thread block 在一个 3rd party lib 等待认证回应的 function
所以不能用一般在 thread 下 check event 的方式来决定要不要离开
Google 了一下,找到利用 thread-id raise exception 的方式
http://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in-python
shorten:
http://goo.gl/MRRDFA
但是怎么试也无法成功...都是 invalid thread ID
尝试用文中的 walk 找 tid,或是用 threading.current_thread().ident
得到的都是一个很长的数字,也许不是真正的 tid?
所以试着用 system call 的方式
libc = ctypes.cdll.LoadLibrary('libc.so.6')
tid = libc.syscall(186)
的方式来得到 tid
但是丢进去 PyThreadState_SetAsyncExc 里还是 invalid tid...
也就是 return 是 0
请问该如何得到正确的 tid?
或是有其他方式可以 kill thread? (最好是 portable 的)
也顺便问问是否有其他更好的做法可以避免需要 kill thread?