如何在后台执行计算
你可以在任务的服务端模块中使用如下代码,在 Web 应用中每隔 3 分钟(可通过 interval 设置修改)启动一个后台线程执行一些计算:
import threading
import time
import traceback
def background(task):
interval = 3 * 60
time.sleep(interval)
while True:
if not time:
return
with task.lock('background'):
try:
print('background')
# some code to execute in background for example:
# tracks = task.tracks.copy()
# tracks.open()
# for t in tracks:
# t.edit()
# t.sold.value = #some value
# t.post()
# tracks.apply()
except Exception as e:
traceback.print_exc()
time.sleep(interval)
def on_created(task):
bg = threading.Thread(target=background, args=(task,))
bg.daemon = True
bg.start()
备注
当多个 Web 应用以并行进程运行时,background 函数会在每个进程中执行。 为防止该函数被同时执行,我们使用了 task 的 lock 方法。
备注
Jam.py V7 引入了 计算字段(calculated field) 。现在可以在主/明细(Master/Detail)场景下,使用服务器端函数(SUM、COUNT、MIN、MAX、AVG)对其他表字段进行汇总。用户可以根据需要,将服务器端的计算代码替换为计算字段。