如何在后台执行计算

你可以在任务的服务端模块中使用如下代码,在 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)对其他表字段进行汇总。用户可以根据需要,将服务器端的计算代码替换为计算字段。