【问题标题】:Having trouble with flask-SocketIO and eventletflask-SocketIO 和 eventlet 有问题
【发布时间】:2021-07-24 17:41:25
【问题描述】:

我正在开发我的期末学位项目,我在 Python、Flask、socketIO 和后台线程方面遇到了一些问题。

我的解决方案将一些文件作为输入,处理它们,进行一些计算,然后生成图像和 CSV 文件。然后将这些文件上传到某个存储服务。我想在后台线程上处理文件并使用 websockets 通知我的客户端(Web、Android 和 iOS)。现在,我使用flask-socketIOeventlet 作为我的套接字的async_mode。当客户端上传文件时,该进程在后台线程中启动(使用socketio.start_background_task)但繁重的进程(大约需要 30 分钟才能结束)似乎控制了主线程,因此当我尝试制作时对服务器的 HTTP 请求,响应正在无限加载。

我想知道是否有办法使用 eventlet 或使用其他不同的方法来完成这项工作。

提前谢谢你。

【问题讨论】:

标签: python flask socket.io flask-socketio eventlet


【解决方案1】:

Eventlet 使用协作多任务,这意味着您不能让一个任务长时间使用 CPU,因为这会阻止其他任务运行。

一般来说,在 eventlet 进程中包含 CPU 繁重的任务是一个坏主意,因此一种可能的解决方案是将 CPU 繁重的工作卸载到外部进程,可能通过 Celery 或 RQ。有时有效(但并非总是)的另一个选项是在 CPU 繁重任务中尽可能频繁地添加对 socketio.sleep(0) 的调用。 sleep 调用会中断该函数片刻,并允许其他函数等待 CPU 运行。

【讨论】:

    猜你喜欢
    • 2016-07-22
    • 2018-07-27
    • 2021-03-19
    • 1970-01-01
    • 2018-07-14
    • 2016-05-12
    • 1970-01-01
    • 2016-04-19
    • 2018-06-18
    相关资源
    最近更新 更多