首先,对不起您的头衔。
我想让my_api_service.py
作为后台服务运行,该服务与 REST-API 类似,其他脚本,但没有HTTP 。
在不同的Python实例上运行的不同的虚拟环境上的脚本应该能够通过my_api_service.py
使用my_api_connector.py
。
我希望我的问题是不是基于观点的,因为我正在寻找一种常见/最佳实践/模式。
以下是伪代码。
my_api_service.py -Python实例1
# Singleton
instance = None
def instance():
if not instance:
self.instance = MyGlobalService()
return instance
# Title setter
def set_title(title):
self.instance.set_title(title)
# Title getter
def get_title(title):
return self.instance.get_title()
print_current_title.py -Python实例2
from my_api_connector import get_instance
while True:
# The title should change when set_title.py was executed
title = get_instance().get_title()
print('Current title: {0}'.format(title))
set_title.py -Python实例3
from my_api_connector import get_instance
get_instance().get_title('New title')
有什么主意吗?预先感谢!
答案 0 :(得分:1)
这是一个使用套接字的示例。
client.py:
import my_api_connector
print(my_api_connector.get_title()) # will print title
my_api_connector.set_title('another_title')
print(my_api_connector.get_title()) # will print another_title
my_api_connector.py:
import socket
IP = '127.0.0.1'
PORT = 12345
SOCK = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
def get_title():
SOCK.sendto(b'get_title', (IP, PORT))
data, _ = SOCK.recvfrom(1024)
return str(data, 'utf-8')
def set_title(title):
SOCK.sendto(bytes('set_title {}'.format(title), encoding='utf-8'), (IP, PORT))
server.py:
import socket
IP = '127.0.0.1'
PORT = 12345
SOCK = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
SOCK.bind((IP, PORT))
def main():
title = 'title'
while True:
data, addr = SOCK.recvfrom(1024)
data = str(data, 'utf-8')
if data == 'get_title':
SOCK.sendto(bytes(title, encoding='utf-8'), addr)
elif data.startswith('set_title'):
title = data[len('set_title '):]
if __name__ == '__main__':
main()
只需在一个控制台中启动server.py,然后在另一个控制台中启动client.py。