python - 线程、多处理或异步,什么适合我的项目?
问题描述
我正在开发一个金融应用程序,它(间接)使用 websocket-client 每秒从 NseIndia 接收实时信息。
程序结构由多个并行运行的Task组成。
所有这些任务都需要同时实时提供各种符号。
每个符号都是一个 Python 对象,其中包含请求该符号的任务列表。
饲料源模块每秒接收数百个饲料。它有一个方法“distribute()”,可以分离传入的提要并将其发送到相应的符号。然后,符号会进一步将提要重新分配给所有需要它的任务。
为了实现这种并行性,我一直在使用 python 线程模块的线程。
问题是 CPU 一次不能处理超过 1000 个线程,抛出一个
"RuntimeError: can't start new thread"
完整追溯:
Exception in thread Thread-6542:
Traceback (most recent call last):
File "C:\Users\PC2\AppData\Local\Programs\Python\Python37-32\lib\threading.py", line 917, in _bootstrap_inner
self.run()
File "C:\Users\PC2\AppData\Local\Programs\Python\Python37-32\lib\threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\PC2\PycharmProjects\Feedtest2\Arena\Cerebelle.py", line 49, in quote_distribute
inx.feed(quote)
File "C:\Users\PC2\PycharmProjects\Feedtest2\Arena\Instrument.py", line 23, in feed
Thread(target=sprite.feed, args=(quote,), daemon=True).start()
File "C:\Users\PC2\AppData\Local\Programs\Python\Python37-32\lib\threading.py", line 847, in start
_start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
请提出解决方法或替代方法!
谢谢你!
解决方案
您可以使用消息系统(如 RabbitMQ、Apache Kafka),而不是拥有这么多线程。将您从 websocket 获得的消息推送到适当的队列,然后一个或多个单独的工作进程可以按照收到的顺序处理它们。
推荐阅读
- typescript - 我怎样才能做 debounceTime 但第一个值
- r - “文件中的错误(文件,“rt”):在读取 1 个 .csv 文件时,“描述”参数无效”
- azure - Azure DevOps 部署到具有不同 SPN 的同一订阅中的资源组
- angular - 为什么我的 Angular 模板中的数据会出现“未定义”错误?
- excel - 用户窗体问题:组合框不会填充项目
- python-3.x - Python3 有内置的 Http/2 请求库吗?
- javascript - 如何用鼠标限制容器大小的方向
- javascript - GPS 坐标的 D3 投影显示有趣的行为
- java - 二维数组每一行的总和。在方法内部
- python - Spyder 从错误的 python 环境中导入 numpy