接続を永続的に開いたままにし、スクリプトの外部で行われた変更に応答する Python スクリプトを実行しようとしています。
たとえば、次のようになります。
- データ スクリプト: フォームの投稿を受け入れ、フォーム データをデータベースにコミットします。
- ワーカー スクリプト: 新しいフォームの投稿がないかデータベースを監視し、それに応じてアクションを実行します
ワーカー スクリプトの関連コードは次のとおりです。
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)
開いている接続を使用して、最新のデータをポーリングさせる方法はありますか?