多个用户使用python CGI进行表单提交

时间:2013-02-11 17:17:45

标签: python cgi

我在python中有一个简单的cgi脚本,从通过post提交的表单字段中收集一个值。收集完成后,iam将这些值转储到单个文本文件中。

现在,当多个用户同时提交时,我们该如何处理?

在C \ C ++中我们使用信号量\ mutex \ rwlocks等?我们在python中有类似的东西吗?此外,多次打开和关闭文件对于每个用户请求似乎都不是一个好主意。

我们的产品代码库是用C \ C ++编写的。我被要求编写一个简单的cgi脚本用于报告目的,并使用python和cgi进行Google搜索。

请告诉我。

谢谢! Santhosh

3 个答案:

答案 0 :(得分: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对象。当您需要访问资源时,请调用acquire来保持锁定(这将等待锁定被释放,如有必要),并调用release以释放它

答案 1 :(得分:0)

如果您担心多个用户,并考虑复杂的解决方案,如互斥锁或信号量,您应该问问自己为什么要计划首先使用不合适的解决方案,如CGI和文本文件。通过这样做,您节省的任何复杂性都将超过您为实现多个用户而设置的任何内容。

正确的方法是编写一个简单的WSGI应用程序 - 可能使用像Flask这样的东西 - 它写入数据库而不是文本文件。

答案 2 :(得分:0)

简单(和慢速)方法是获取文件上的锁(在C中你使用flock),在其上写入并关闭它。如果您认为这可能是一个瓶颈,那么请使用数据库或类似的东西。