我是python编码方面的新手,我正在尝试学习多处理来解决我遇到的一个问题。在
我有一个项目与树莓pi(linux)和从另一个PC/设备(windows)我试图共享他们之间的数据与TCP连接。我做了服务器/客户机代码正在工作(服务器在树莓和客户机在PC机)。在
下一步是制作一个可视化应用程序(在本例中,我选择kivy),并通过这个应用程序将数据从我的PC直接连接到我的raspberry,PC是这里直接从python/kivy代码获得的客户机。在
问题是,当我在kivy应用程序中引入IP和端口时,脚本正在连接我,但是立即关闭服务器,我希望我的服务器一直保持活动状态。在
另一个问题是,假设服务器没有被代码杀死,在另一个名为send_data的函数中,我想将速度和角度变量发送到我的服务器,并且仍然连接到服务器,服务器仍然是活动的,所以我唯一的选择是多处理。在
raspberry上服务器的代码:
import socket
host = ''
port = int(input("Port: "))
speed = []
angle = []
def setupServer():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print ("Socket created")
try:
s.bind((host, port))
except socket.error as msg:
print(msg)
print("Socket bind complete.")
return s
def setupConnection():
s.listen(1)
conn, address = s.accept()
print("Connected to: " +address[0] + ":" + str(address[1]))
return conn
def dataTransfer(conn):
global speed,angle
data = conn.recv(1024)
data = data.decode('utf-8')
""" split the data """
dataMessage = data.split(' ',1)
speed = dataMessage[0]
angle = dataMessage[1]
print(speed)
print(angle)
if dataMessage[0] == 'exit':
print("Client has left the server")
break
if dataMessage[0] == 'kill':
print("Server is shutting down")
s.close()
break
conn.close()
s = setupServer()
while True:
try:
conn = setupConnection()
dataTransfer(conn)
except:
break
我的客户机使用kivy模块的代码:
^{pr2}$kivy造型零件代码:
^{3}$我想通过TCP连接来连接、断开连接和发送数据,所有这些都是在服务器一直处于活动状态(只有当我按下“停止服务器”按钮时服务器才应该关闭)。 显然kivy模块有一个奇怪的结构,我真的不明白如何在我的问题和kivy结构中分配多处理。在
你们中有人能看看我的代码,用多重处理来纠正我的代码,或者至少给我一个建议/教程或其他什么吗?在
更新:正如您所见,我还没有使用任何多处理代码,首先我尝试使用pool和map将连接部分划分为一个核心,而其余部分则位于另一个核心上,但是为了使服务器保持活动状态,我需要在连接区域中设置一个循环序列。(我的笔记本电脑只有2个核心)
请改用threading。多处理基本上类似于启动另一个进程,除非写入文件,否则共享数据并不容易。有了线程,您可以在同一个进程中,并且可以访问线程之间的变量。
下面是一个如何实现线程的小例子。在
相关问题 更多 >
编程相关推荐