1

我正在尝试运行一个 Python 脚本,该脚本使连接永久打开,并响应在脚本之外所做的更改。

例如:

  1. 数据脚本:接受表单帖子并将表单数据提交到数据库
  2. Worker 脚本:监控数据库中的新表单帖子并采取相应措施

worker 脚本中的相关代码为:

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 回答