1

接続を永続的に開いたままにし、スクリプトの外部で行われた変更に応答する Python スクリプトを実行しようとしています。

たとえば、次のようになります。

  1. データ スクリプト: フォームの投稿を受け入れ、フォーム データをデータベースにコミットします。
  2. ワーカー スクリプト: 新しいフォームの投稿がないかデータベースを監視し、それに応じてアクションを実行します

ワーカー スクリプトの関連コードは次のとおりです。

import pymysql

conn = pymysql.connect(host='127.0.0.1', port=3306, user='dbuser', passwd='dbpass', db='my_db')

def processForms(Formdat):
    c = conn.cursor(pymysql.cursors.DictCursor)
    myform.sendEmail(c)
    conn.commit()
    c.close()

def doForms():
    while True:
        ... get data and store in 'myforms' ...
        futures = [executor.submit(processForms, myform) for myform in myforms]
        time.sleep(30)

doForms()

これが新しいフォームを取得しない理由がわかりません... doForms() の各反復で新しい接続を作成すると、新しいフォームが取得されますが、接続を作成および破棄したくありませんいつも。

たとえば、次の変更は機能します。

conn = None

def doForms():
    while True:
        global conn
        conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='mw_py')
        ... get data and store in 'myforms' ...
        futures = [executor.submit(processForms, myform) for myform in myforms]
        conn.close()
        time.sleep(30)

開いている接続を使用して、最新のデータをポーリングさせる方法はありますか?

4

1 に答える 1

0

スクリプトの先頭で 1 つの接続を開きます。接続するのは安価な操作ではありません。

フェッチされた最後の行の ID を記憶します。

反復ごとに、最後に表示されたものよりも大きい ID を持つ行を選択します。

于 2013-11-27T12:24:04.180 に答える