我在python中有一个简单的cgi脚本,从通过post提交的表单字段中收集一个值。收集完成后,iam将这些值转储到单个文本文件中。
现在,当多个用户同时提交时,我们该如何处理?
在C \ C ++中我们使用信号量\ mutex \ rwlocks等?我们在python中有类似的东西吗?此外,多次打开和关闭文件对于每个用户请求似乎都不是一个好主意。
我们的产品代码库是用C \ C ++编写的。我被要求编写一个简单的cgi脚本用于报告目的,并使用python和cgi进行Google搜索。
请告诉我。
谢谢! Santhosh
答案 0 :(得分: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以释放它
答案 1 :(得分:0)
如果您担心多个用户,并考虑复杂的解决方案,如互斥锁或信号量,您应该问问自己为什么要计划首先使用不合适的解决方案,如CGI和文本文件。通过这样做,您节省的任何复杂性都将超过您为实现多个用户而设置的任何内容。
正确的方法是编写一个简单的WSGI应用程序 - 可能使用像Flask这样的东西 - 它写入数据库而不是文本文件。
答案 2 :(得分:0)
简单(和慢速)方法是获取文件上的锁(在C中你使用flock),在其上写入并关闭它。如果您认为这可能是一个瓶颈,那么请使用数据库或类似的东西。