use*_*625 2 c++ python linux networking gcc
我有一个GNU C++程序和一个python脚本,需要经常相互传递字符串(每分钟约70-80条消息).它们将在CentOS中相互本地运行(托管在相同的环境中).感觉虽然TCP/IP可以并且将完成工作,但我还有其他选择吗?
请记住,我不能将我的C++程序转换为SO并使用ctypes将其集成到我的python脚本中,我的C++程序必须以32位编译,而我的python脚本必须是64位.
如果您已有TCP或UDP服务器,最简单的方法可能是切换到UNIX域套接字.
它们采用"流"和"数据报"模式,就像TCP/UDP套接字一样,它们总是本地的,因为它们使用文件系统命名空间(而不是像TCP/UDP这样的端口号).
命名管道是标准方法.在Python中:
import os
os.mkfifo('/some/path')
# Reading process
with open('/some/path') as pipe:
for line in pipe:
# Do what you need
# Writing process
with open('/some/path', 'w') as pipe:
while True: # Whatever looping process you have
pipe.write('<data>' + '\n')
Run Code Online (Sandbox Code Playgroud)
请注意,在现代系统上,70-80消息/分钟并不是那么高,TCP仍然是一个可行的选择.还要注意,没有一个字符串大于管道缓冲区大小(通常为64K).
根据评论中的建议,我还添加了UNIX域套接字的示例,如果您需要双向通信,它们会更有用.
# Server Side
import socket
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.bind("/some/path")
sock.listen(1)
conn, addr = sock.accept()
while True:
data = conn.recv(1024)
if not data:
break
# Let's echo it back as an example
conn.send(data)
conn.close()
# Client Side
import socket
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect("/some/path")
while True: # Your sending loop
# In this case we send hello world, and print what we get back.
sock.send('Hello, world')
data = sock.recv(1024)
print data
sock.close()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
632 次 |
| 最近记录: |