2013-02-11 155 views
0

我有一個簡單的python腳本,用於從通過post提交的表單域中收集值。收集完成後,iam將這些值轉儲到單個文本文件中。多個用戶使用python執行表單提交CGI

現在,當多個用戶同時提交時,我們該如何去做呢?

在C \ C++中,我們使用信號\ mutex \ rwlocks等?我們有沒有類似的Python?此外,多次打開和關閉文件似乎不是每個用戶請求的好主意。

我們在C \ C++中有我們的產品代碼庫。我被要求編寫一個簡單的cgi腳本用於報告目的,並且使用python和cgi進行搜索。

請讓我知道。

謝謝! Santhosh

回答

1

有很多可以使用的基於python的服務器。這裏有一個:

Twisted

Twisted是用Python編寫,並授權的開源下一個事件驅動的網絡引擎

from twisted.internet import protocol, reactor 

class Echo(protocol.Protocol): 
    def dataReceived(self, data): 
     self.transport.write(data) 

class EchoFactory(protocol.Factory): 
    def buildProtocol(self, addr): 
     return Echo() 

reactor.listenTCP(1234, EchoFactory()) 
reactor.run() 

你可能想要將其值下降到一個數據庫而不是一個文本文件。

但是可以使用線程,因此您可以使用lock()確保一次只有一個用戶寫入文件。

http://effbot.org/zone/thread-synchronization.htm

鎖通常用於同步訪問共享資源。對於每個共享資源,創建一個Lock對象。當你需要訪問資源時,呼叫獲取來保持鎖定(這將等待鎖釋放,如果有必要),並呼叫釋放釋放它

+0

感謝所有的信息。我的觀點是隻使用簡單的CGI做報告,我認爲它有內置的庫來處理這些場景。無論如何,iam現在正在轉向其他解決方案。再次感謝您的所有時間! – Santhosh 2013-03-01 17:28:04

0

如果您關心多個用戶,並考慮複雜的解決方案(如互斥鎖或信號量),您應該問自己爲什麼要計劃首先使用不合適的解決方案(如CGI和文本文件)。無論您爲了允許多個用戶而放置什麼,您通過這樣做所節省的任何複雜性都不會超過。

要做到這一點的正確方法是編寫一個簡單的WSGI應用程序 - 也許使用像Flask這樣的東西 - 寫入數據庫而不是文本文件。

0

簡單(和緩慢的方式)是獲得對文件的鎖定(在C中你會使用羣集),寫入並關閉它。如果你認爲這可能是一個瓶頸,那麼使用數據庫或類似的東西。