Ich kann ein Numpy -Array mit Nulomq nicht mehr als 2 GB sendenPython

Python-Programme
Anonymous
 Ich kann ein Numpy -Array mit Nulomq nicht mehr als 2 GB senden

Post by Anonymous »

Ich verwende den unten gezeigten Python -Code, um ein Numpy -Array vom Client mit Neromq an den Server zu senden und zu senden. Mir ist aufgefallen, dass der Client beim Senden des Arrays, wenn das Numpy -Array größer als 2 GB ist. Zum Beispiel im unten angegebenen Client.py Code, wenn Sie n = 17000 verwenden, bleibt der Client nach dem Erstellen des Arrays zum Stillstand. Ich habe diesen Code auf einem MacBook Pro -Laptop mit 32 GB Speicher geleitet, sodass für die Nachricht viel RAM zur Verfügung steht. Gibt es eine Grenze für die Größe eines Numpy -Arrays, das ich mit Zeromq senden kann? Wenn es ein Limit gibt, wie würde ich dann ein Array senden, das das Größenlimit überschreitet? pre class = "Lang-Py PrettyPrint-Override">

Code: Select all

import sys
import numpy as np
import zmq

class Client:
"""Client for sending/receiving messages."""

def __init__(self, address="tcp://localhost:5555"):
context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect(address)
self.socket = socket

def send_array(self, array: np.ndarray):
md = {"dtype": str(array.dtype), "shape": array.shape}
self.socket.send_json(md, zmq.SNDMORE)  # send metadata
self.socket.send(array, copy=False)     # send NumPy array data

def recv_message(self):
reply = self.socket.recv_string()
print("Received reply:", reply)

def main():
# Create array
n = 16000  # 8000 is 500 MB, 11500 is 1 GB, 16000 is 2 GB, 17000 fails to send
x = np.random.rand(n, n)
print(f"Array shape:           {x.shape}")
print(f"First three elements:  {x[0, 0:3]}")
print(f"Size of array data:    {x.nbytes} bytes, {x.nbytes / 1000**2} MB")
print(f"Size of array object:  {sys.getsizeof(x)} bytes, {x.nbytes / 1000**2} MB")

# Create client and send array
client = Client()
client.send_array(x)
client.recv_message()

if __name__ == "__main__":
main()
< /code>
Servercode, der Numpy Array (Server.py) empfängt, < /p>
from typing import Any
import zmq
import numpy as np

class Server:
"""Server for receiving/sending messages."""

def __init__(self, address="tcp://localhost:5555"):
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind(address)
self.socket = socket
print("Server started, waiting for array...")

def _recv_array(self):
md: Any = self.socket.recv_json()               # receive metadata
msg: Any = self.socket.recv(copy=False)         # receive NumPy array data
array = np.frombuffer(msg, dtype=md["dtype"])   # reconstruct the NumPy array
return array.reshape(md["shape"])

def run(self):
"""Run the server."""
while True:
# Receive the NumPy array
array = self._recv_array()
print("Received array with shape:", array.shape)
print(f"First three elements:  {array[0, 0:3]}")

# Send a confirmation reply
self.socket.send_string("Array received")

def main():
server = Server()
server.run()

if __name__ == "__main__":
main()

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post