首先,我很抱歉这个糟糕的头衔。
我想让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')
任何的想法?提前致谢!
这是一个使用套接字的例子。
client.朋友:
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
没有_API_connector.朋友:
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.朋友:
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。