0

投稿を通じて送信されたフォームフィールドから値を収集するPythonの簡単なcgiスクリプトがあります。これを収集した後、iamはこれらの値を単一のテキストファイルにダンプします。

さて、複数のユーザーが同時に送信する場合、どうすればよいでしょうか。

C \ C ++では、semaphore \ mutex \ rwlocksなどを使用しますか?Pythonに似たようなものはありますか?また、ファイルを複数回開いたり閉じたりすることは、すべてのユーザー要求に対して良い考えではないようです。

製品のコードベースはC\C++にあります。レポートの目的で簡単なcgiスクリプトを作成するように依頼され、pythonとcgiをグーグルで検索していました。

私にお知らせください。

ありがとう!サントッシュ

4

3 に答える 3

1

使用できるPythonベースのサーバーはたくさんあります。これが1つです:

ツイスト

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()一度に1人のユーザーのみがファイルに書き込むようにするために使用できます。

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 に答える