如何使多套接字 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))
所以,基本上我有一个 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))