如何使多套接字 DDE 和 RTD 请求更快

How to make multiple socket DDE & RTD requests faster

所以,基本上我有一个 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 秒之间的时间。所以,我尝试使用多处理,但是,它开始占用我计算机的无限内存,直到它崩溃。 我可以做些什么来优化这段代码吗?谢谢!

我的建议是使用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))