AWS Batch上的进程间通信

问题描述

是否可以将ZeroMQ用于AWS Batch上的作业与本地父流程之间的进程间通信?如果是这样,请问有一个简单的例子可以参考吗?我在查找有关此文档时遇到麻烦。

我希望提出clustermq R软件包有朝一日能够支持AWS Batch后端:https://github.com/mschubert/clustermq/issues/208clustermq已经可以在SLURM之类的传统作业调度程序上向工作人员发送R函数调用,并可以使用ZeroMQ与工作人员进行通信。

解决方法

Q “是否可以使用ZeroMQ在AWS Batch上的作业与本地父流程之间进行进程间通信?”

ZeroMQ是一个可以使用的工具箱,因此唯一的问题将是由云所有者决定的策略(加上修饰因子瓶颈,因为这些瓶颈一直是与奇点相关的新型问题,如果有人将其作为SPoF要...)

ZeroMQ本身就没有分布式计算的问题。


一个PoC示例

我们可以在所有远程节点上实例化此代码,并让它们与您的本地主机运行并进行通信,请确保是否不受云所有者的一组策略的阻止,并且是否可以让接收方在由云引发的海啸中幸存下来; o)

设置了连通性,以便远程发送者代码“知道”本地主机的公共IP地址或类似动机的SSH隧道元平面,该SSH平面通过SSH端口转发隧道协调互连,从而允许所有云远程发件人(如果没有被云所有者阻止...)实际上到达了本地主机私有IP地址,就像它们在同一私有LAN网段中一样。

(为方便交叉移植而提供的Python代码)


本地主机接收器模型示例:

import zmq;         nIOthreads = 4 ### traffic dependent,given an expected ingress Tsunami
aCtx = zmq.Context( nIOthreads )
aSub = aCtx.socket( zmq.XSUB )
aSub.bind( "tcp://<_aPublicIpADDRESS_or_SSL_tunnelled_privateIpADDRESS_>:<_port#_>" )
aSub.setsockopt( zmq.LINGER,0 )
aSub.setsockopt( zmq.CONFLATE,0 )
aSub.setsockopt( zmq.SUBSCRIBE,"" )
...
while True:
      try:
           ret = aSub.recv( zmq.NOBLOCK )
           if ret:
                 print( "GOT: {0:}".format( repr( ret ) ) )

      except:
           print( "EXC: will terminate" )
           break

      finally:
           aSub.close()
           aCtx.term()

print( "FIN:  did terminate and process will sysexit." )

云远程发件人模型示例:

import socket
import zmq;         nIOthreads = 1 ### beware of the grooming-factor effects on traffic
aCtx = zmq.Context( nIOthreads )
aPub = aCtx.socket( zmq.XPUB )
aPub.connect( "tcp://<_aPublicIpADDRESS_or_SSL_tunnel_to_privateIpADDRESS_>:<_port#_>" )
aPub.setsockopt( zmq.LINGER,0 )
aPub.setsockopt( zmq.CONFLATE,0 )
...
aCloudHostMsgN = 1
aCloudHostNAME = socket.gethostname()
aCloudHostIP   = socket.gethostbyname( aCloudHostNAME )
aMsgMASK       = ( "msg[{0:_>9d}]"
                 + "_from_{0:_>20s}_ip_{1:_>20s}".format( aCloudHotsNAME,aCloudHostIP
                                                          )
                   )
while True:
      try:
           aPub.send( aMsgMASK.format( aCloudHostMsgN ) )
           pass;                       aCloudHostMsgN++

      except:
           print( "EXC: will terminate" )
           break

      finally:
           aPub.close()
           aCtx.term()

print( "FIN:  did terminate and process will sysexit." )

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...