繁体   English   中英

如何停止/杀死 Heroku 上的线程 python?

[英]How to stop/kill a thread python on Heroku?

在本地,在 Windows 上,我可以停止我的线程引发异常:

def raise_exception_in_thread(t:Thread):
    ctypes.pythonapi.PyThreadState_SetAsyncExc(ctypes.c_long(t.ident), ctypes.py_object(SystemExit))

但是,在 Heroku 上,我的线程不会停止。

我试过了 :

ctypes.pythonapi.PyThreadState_SetAsyncExc(t.native_id, ctypes.py_object(SystemExit))
ctypes.pythonapi.PyThreadState_SetAsyncExc(t.ident, ctypes.py_object(SystemExit))
ctypes.pythonapi.PyThreadState_SetAsyncExc(ctypes.c_ulong(t.native_id), ctypes.py_object(SystemExit))
ctypes.pythonapi.PyThreadState_SetAsyncExc(ctypes.c_ulong(t.ident), ctypes.py_object(SystemExit))
ctypes.pythonapi.PyThreadState_SetAsyncExc(ctypes.c_long(t.native_id), ctypes.py_object(SystemExit))

如果有帮助,我找到了解决方案:

我使用 async_mode 'gevent' 在 heroku 上部署了一个 Flask/SocketIO 应用程序:

app = Flask(__name__)
socketio = SocketIO(app, async_mode='gevent')

档案:

web: gunicorn -k gevent -w 1 main:app

并且能够通过引发异常来停止heroku上的线程,
我必须使用 async_mode 'threading' 在 heroku 上部署 Flask/SocketIO 应用程序:

app = Flask(__name__)
socketio = SocketIO(app, async_mode='threading')

档案:

web: gunicorn -w 1 --threads 100 main:app

https://flask-socketio.readthedocs.io/en/latest/api.html
https://flask-socketio.readthedocs.io/en/latest/deployment.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM