首页 > 解决方案 > 如何使多个套接字 DDE 和 RTD 请求更快

问题描述

所以,基本上我有一个 python 程序,我需要截取 137 个提供 excel 文件的 DDE 和 RTD 信号。我通过使用带有以下代码的套接字来做到这一点:

import socket
import win32api

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 12002))

s.sendall(str.encode('COT$S|' + stock + '#'))
data = s.recv(32768)

但是,当我运行 137 次时,需要 27 秒才能完成,但我需要 5 到 10 秒之间的时间。所以,我尝试使用多处理,但是,它开始占用我计算机的无限内存,直到它崩溃。我可以做些什么来优化这段代码吗?谢谢!

标签: pythonperformancesocketswinapirtd

解决方案


我的建议是使用multiprocessing.Pool. 手头有一些时间,我做了一些模拟测试,这很有效。调整以适应您的需求。

事实上,它将使用一个由 5 个工作人员组成的池来循环遍历stocks列表中的每个项目,因此应该检查内存消耗,但执行速度应该非常快。当然,您可以调整池大小。

import socket
import win32api
from multiprocessing import Pool

stocks = ['AA', 'BB', 'CC', 'DD', 'EE']  # just a sample list

def network_op(stock):
    print('Running ' + stock)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('127.0.0.1', 12002))
    s.sendall(str.encode('COT$S|' + stock + '#'))
    d = s.recv(32768)
    return d


if __name__ == '__main__':
    with Pool(5) as p:
        print(p.map(network_op, stocks))

推荐阅读