示例#1
0
 def __init__(self, processor, shared, peer):
     super(RemoteReporter, self).__init__()
     self.name = 'Reporter-' + peer
     # Binding shared objects
     self.dir = shared.settings['Main']['Temporary directory'] + sep + \
     hex(int(monotonic() * 100))[2:]
     self.queue = shared.queue
     # Current running job, not nessesary self.cur
     self.curproc = processor.getcur
     self.pid = processor.getpid
     # Socket creation
     tcp = socket()
     tcp.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
     tcp.settimeout(10)  # OPTIMIZE: Find optimal timeout
     tcp.bind(('0.0.0.0', 50000))
     tcp.listen(1)
     try:
         self.tcp, addr = tcp.accept()
     except timeout:
         tcp.close()
         self._alive = False
         return
     self.tcp.settimeout(10)
     # Setting socket for file transfer
     self.filetransfer = FileTransfer(socket=self.tcp, blocksize=10240)
     tcp.close()
     # Receive job class as it is
     try:
         sjob = loads(self.tcp.recv(4096).decode('utf-8'))
     except timeout:
         error('Timeout while obtainig job')
         self.stop()
         return
     self.job = Job(*sjob)
     # Equivalents of local and remote dirs
     self.eqdirs = dict()
     # Receive nessesary files and attach their with local paths to job
     for name, rpath in self.job.files.items():
         rdir = dirname(rpath)
         ldir = self.dir + sep + hex(hash(rdir))[3:]
         self.eqdirs[ldir] = rdir
         lpath = ldir + sep + basename(rpath)
         # Make directory
         try:
             makedirs(ldir, exist_ok=True)
             self.tcp.send(
                 make_header(RR_GET, rpath) + rpath.encode('utf-8'))
             # Receive file to local path
             self.filetransfer.recvfile(lpath)
         except:
             exception('Error while obtaining job files')
             self.stop()
             return
         # Attach local path to job
         debug("Replaced " + name + " from " + rpath + " to " + lpath)
         self.job.files[name] = lpath
     # Put job into the queue
     self.queue.put(self.job)
     shared.inform('add', self.job)
示例#2
0
 def __init__(self, shared, peer):
     super(RemoteReceiver, self).__init__()
     self.peer = peer
     self.name = 'Receiver-' + self.peer
     # Binding shared objects
     self.queue = shared.queue
     self.inform = shared.inform
     self.sendto = shared.udpsocket.sendto
     # Socket creation
     self.tcp = socket()
     self.tcp.settimeout(10)  # OPTIMIZE: Find optimal timeout
     sleep(1)  # OPTIMIZE: Find optimal sleep before connection
     try:
         self.tcp.connect((peer, 50000))
     except:
         error('Unable to connect remote worker ' + self.peer)
         self.stop()
         return
     self.filetransfer = FileTransfer(self.tcp, blocksize=10240)
     self.job = self.queue.get()
     debug("Job extracted: " + str(self.job.id))