【问题标题】:Non-blocking SQL execution using Python使用 Python 的非阻塞 SQL 执行
【发布时间】:2018-12-08 01:02:49
【问题描述】:

我的问题可能没有明确的答案,所以如果我想要做的事情不切实际,请告诉我。

我有一个运行多个独立 SQL 语句的 Python 脚本。由于超时限制,等待语句完成执行不是一种选择。这些语句用于维护,预计不会有任何输出。有没有办法异步触发这些?

例如,使用 psycopg2.cursor,我期望执行以下操作:

cursor.execute(sql_statement)
# Run next code block

【问题讨论】:

  • 在单独的线程中运行它们。
  • 按照 rd_nielsen 的建议在线程中运行它们,只是要注意阻塞表/行上的锁,这可能会导致您的并行实现为单线程

标签: python sql postgresql psycopg2


【解决方案1】:

配方是threading。以这种方式使用它:

from threading import Thread
Thread(target=cursor.execute, args=(sql_statement,)).start()

值得注意的是,在这些线程完成之前,您的程序无法正常退出。如果这种行为不适合您,您可以关注subprocess 模块,该模块能够创建独立运行的任务。

【讨论】:

  • joinThread 的调用在哪里?你不能把它与返回值联系起来——它已经丢失了。
  • 问题是关于如何在处理程序中继续执行等待查询结果的程序 - 我如何理解非阻塞查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
相关资源
最近更新 更多