2014-07-14 45 views
1

在Python中,如何用數據行(字符串)填充緩衝區並將其與第二個進程一起使用?這裏有充足的例子來添加和讀取字符串中的行,但我需要從字符串中刪除消耗的行,以使字符串作爲緩衝區來使用。字符串作爲具有多處理訪問權限的發送緩衝區

示例:從串口讀取零星數據並通過TCP/IP將其發送到服務器。在一個循環內逐行並且沒有緩衝=沒有問題,但是在目的地不可達的情況下,數據應該被存儲在緩衝區中並且一旦連接可用就發送。

#!/usr/bin/python 
import serial 
import socket 
from multiprocessing import Process 

ip = "someURL" 
port = 12345 
ser = serial.Serial("/dev/ttyUSB0", 57600, timeout=0) 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

def serial_reader(): 
    while True: 
     for line in ser.read(): 
      try: 
       response = ser.readlines(None) 
       response = str(response) 
       message = response[7:] 
      except: 
       print datetime.datetime.now(), " No data from serial connection." 
## 

def data_sender(): 
    s.connect((ip, port)) 
    while True: 
     for line in queue(): 
      try: 
       s.send(message) 
      except: 
       try: 
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
        s.connect((ip, port)) 
        continue 
       except: 
        s.close() 
## 

if __name__ == '__main__': 
    Process(target=serial_reader).start() 
    Process(target=data_sender).start() 

回答

1

我覺得達到你想要什麼,最好的方法是使用隊列:

from multiprocessing import Queue

專門使用queue.put()將字符串隊列,queue.get()進行檢索,並queue.task_done()以表明任務已完成。

https://docs.python.org/2/library/queue.html#Queue.Queue

,如果你需要一個更大的槍看一看實現了AMPQ協議,如rabbitpy的RabbitMQ和Python庫。這是內部進程/內部服務通信的事實標準,並且有很多已經使用的usefyl內容,例如在進程關閉時持久化消息,跨多個進程的負載平衡任務等。