KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Background I have two python processes that need to communicate with each other. The comminication is handled by a class named Pipe. I made a seperate class for this because most of the information that needs to be communicated comes in the form of dictionaries so Pipe implements a pretty simple protocol for doing this. Here is the Pipe constructor: def __init__(self,sPath): """ create the fifo. if it already exists just associate with it """ self.sPath = sPath if not os.path.exists(sPath): try: os.mkfifo(sPath) except: raise Exception('cannot mkfifo at path \n {0}'.format(sPath)) self.iFH = os.open(sPath,os.O_RDWR | os.O_NONBLOCK) self.iFHBlocking = os.open(sPath,os.O_RDWR) So ideally I would just construct a Pipe in each process with the same path and they would be able to talk nice. I'm going to skip out stuff about the protocol because I think it is largely unnecessary here. All read and write operations make use of the following 'base' functions: def base_read_blocking(self,iLen): self.lock() lBytes = os.read(self.iFHBlocking,iLen) self.unlock() return lBytes def base_read(self,iLen): print('entering base read') self.lock() lBytes = os.read(self.iFH,iLen) self.unlock() print('exiting base read') return lBytes def base_write_blocking(self,lBytes): self.lock() safe_write(self.iFHBlocking,lBytes) self.unlock() def base_write(self,lBytes): print('entering base write') self.lock() safe_write(self.iFH,lBytes) self.unlock() print('exiting base write') safe_write was suggested in another post def safe_write(*args, **kwargs): while True: try: return os.write(*args, **kwargs) except OSError as e: if e.errno == 35: import time
Tags (comma-separated)
Save Edits
Cancel