程序的多个实例化彼此交互(Python2.7和Tkinter)

时间:2014-03-19 12:50:34

标签: python tkinter global-variables

我目前有一个餐厅模拟程序,Tkinter的GUI,我正在寻找一种方法,允许多个实例化程序在更新其关键变量的意义上相互交互。 (抱歉我的英语不好)

让我们说:

  • 五位用户使用同一台PC同时打开了该程序。 (假设的)
  • 该计划有三个功能,即OrderSee InventorySee Sales
  • 假设所有五个人都已下订单

现在,餐厅必须跟踪订单,以及烹饪食物的库存。

我尝试使用txt文件导入和导出对程序进行编码以跟踪数据,但刚才我意识到txt文件可以由程序ONE at the TIME编辑。 (无法一次编辑单个txt文件)

问:保存程序中使用的变量值的更好方法是什么,以便多个用户可以使用具有实时更新变量值的程序?

  • 有人告诉我,我可以尝试使用Global变量。但是我怎么可能为它们分配值并让它们更新? (每次程序运行时都会初始化局部变量)

感谢您阅读我的问题!

1 个答案:

答案 0 :(得分:0)

您可以使用sqlite3模块创建轻量级数据库。这不需要服务器程序;数据库管理器位于Python标准库中。多个实例将读/写同一个文件数据库,sqlite将负责确保一致性。

但请注意,有一个5-second global lock on most sqlite implementations,因此您的多个实例必须在少于该时间内完成其读/写操作,否则会导致“数据库锁定”其他情况下的例外。

这里有一个例子:

import sqlite3 as lite
import time


con = lite.connect('common.db')
cur = con.cursor()
cur.execute(
    "CREATE TABLE IF NOT EXISTS restaurant (orderId INT primary key, inventory TEXT, sales INT);")

for i in range(5):
    print "About to insert on ID: %s" % i
    cur.execute("INSERT INTO restaurant VALUES(%d, 'burger', 1)" % i)
    time.sleep(1)

con.close()

如果您同时在两个终端上执行此代码,您会注意到:

  1. 创建'common.db'文件
  2. 两次执行中的一次自由前进;另一个进展到“即将插入ID:0”,然后锁定,直到第一个完成。