程式執行登入時需要在另一個裝置做一些認證
在認證完成前原本程式的 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?