0

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

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

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

我们有我们产品的 C\C++ 代码库。我被要求为一些报告目的编写一个简单的 cgi 脚本,并且正在使用 python 和 cgi 进行谷歌搜索。

请告诉我。

谢谢!桑托什

4

3 回答 3

1

您可以使用许多基于 python 的服务器。这是一个:

扭曲的

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来释放它

于 2013-02-11T17:21:35.157 回答
0

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

正确的做法是编写一个简单的 WSGI 应用程序——可能使用 Flask 之类的东西——它写入数据库,而不是文本文件。

于 2013-02-11T17:21:19.977 回答
0

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

于 2013-02-11T17:44:16.623 回答