python - 发送几个数据包后脚本无法正常运行
问题描述
我正在编写一个 python 程序,它在指定的时间内发送数据包。
发送脚本:
import socket
import time
import networkparam
import ray
ray.init()
transformer_sending_time = 0
final_message_sent = False
@ray.remote
def send_message():
"""
Sends an abnormal measurement to the specified ip address or port number given by the networkparam module
Parameters
----------
None, however we can consider the definitions in networkparam as the function args
Returns
----------
None
"""
global transformer_sending_time
global final_message_sent
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
ip = networkparam.ip
port = networkparam.controller_port
message = b"bait"
seconds = 15
end_time = time.time() + seconds
while time.time() < end_time:
sock.sendto(message, (ip, port))
transformer_sending_time = time.time()
print("done")
final_message_sent = True
s = send_message.remote()
接收脚本:
import time
import socket
import networkparam
ip = networkparam.ip
controller_port = networkparam.controller_port
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((ip,controller_port))
while True:
data, addr = sock.recvfrom(1024)
if not data:
break
print("received message: %s" % data)
我期待发送脚本运行整整 15 秒并打印“完成”。但是,发送脚本发送数据包大约 2 秒,然后中断该功能并且永远不会打印“完成”。
解决方案
ray.remote
是一个非阻塞操作。发生的事情是您的程序开始远程函数调用,然后结束。完成后,它会拆除光线簇并结束远程功能。
你应该添加
s = send_message.remote()
ray.get(s)
将ray.get
尝试获取send_message
(并返回它)的返回值,这意味着程序将不得不等待远程函数完成。
推荐阅读
- elasticsearch - 如何通过嵌套聚合的值获取存储桶的计数?
- regex - 如何从单元格中删除少于 3 个字符的单词?
- typescript - 打字稿类推断
- java - 如何在Java中的arraylist中递归所有孩子
- node.js - 在 Nx 工作区中运行 NestJS 构建工件时出错
- python - 在 Django 中应用迁移时反转回 Postgres 字段类型
- mongodb - 如何在pentaho mongodb输入查询(聚合)中传递变量
- reactjs - 单击时将元素从一个容器转移到下一个容器
- mysql - 通过为某些列分配唯一 ID 来规范化 MySQL 数据库,然后将相关信息移动到新表
- git - Git bash 不允许我重新输入密码