小编Fat*_*ppo的帖子

在Celery中检查计划的定期任务的下一次运行时间(使用Django)

*使用celery 3.1.25,因为django-celery-beat 1.0.1在安排定期任务方面存在问题。

最近,我遇到了一个关于celerybeat的问题,该问题导致调度程序似乎忘记了间隔一天或更长的定期任务。如果我更改时间间隔,every 5 seconds 则任务将正常执行(每5秒),并且last_run_at属性会更新。这意味着celerybeat在一定程度上响应了调度程序,但是如果我重置last_run_atie PeriodicTask.objects.update(last_run_at=None),则every day不再有运行间隔的任务。

Celerybeat在某一时刻崩溃,并且可能损坏了某些内容,因此我创建了一个新的virtualenv和数据库,以查看问题是否仍然存在。我想知道是否有一种方法可以检索下一次运行时间,这样我就不必等待一天就可以知道我的定期任务是否已执行。

我也尝试过使用,inspect <active/scheduled/reserved>但全部归还empty。使用djcelery的数据库调度程序执行定期任务是否正常?

这是安排任务的功能:

def schedule_data_collection(request, project):
    if (request.method == 'POST'):
        interval = request.POST.get('interval')

        target_project = Project.objects.get(url_path=project)    
        interval_schedule = dict(every=json.loads(interval), period='days')

        schedule, created = IntervalSchedule.objects.get_or_create(
            every=interval_schedule['every'],
            period=interval_schedule['period'],
        )

        task_name = '{} data collection'.format(target_project.name)

        try:
            task = PeriodicTask.objects.get(name=task_name)
        except PeriodicTask.DoesNotExist:
            task = PeriodicTask.objects.create(
                interval=schedule,
                name=task_name,
                task='myapp.tasks.collect_tool_data',
                args=json.dumps([target_project.url_path])
            )
        else:
            if task.interval != schedule:
                task.interval = schedule

            if task.enabled is False: …
Run Code Online (Sandbox Code Playgroud)

django celery celerybeat djcelery

5
推荐指数
1
解决办法
1579
查看次数

如何在代理模型处理的模型中为多个列设置项目委托?

我设置我的项目委托如下:

COMBOBOX_ITEMS_FRUITS = ['Apple', 'Banana']
COMBOBOX_ITEMS_COLORS = ['Red', 'Green', 'Blue']

self.treeview.setItemDelegateForColumn(COLUMN_A, ComboBoxDelegate(COMBOBOX_ITEMS_FRUITS))
self.treeview.setItemDelegateForColumn(COLUMN_B, ComboBoxDelegate(COMBOBOX_ITEMS_COLORS))
Run Code Online (Sandbox Code Playgroud)

将模型设置为代理模型的源模型后,我的应用程序崩溃但没有抛出任何错误:

self.model_source = treeview_model
self.sf_proxy_model.setSourceModel(self.model_source)
Run Code Online (Sandbox Code Playgroud)

setItemDelegateForColumn当使用sortfilterproxymodel处理源模型时,我似乎只能使用一个.

ComboBoxDelegate 定义如下:

class ComboBoxDelegate(QStyledItemDelegate):
    def __init__(self, items):
        super(ComboBoxDelegate, self).__init__()

        self.items = items

    def createEditor(self, parent, option, index):
        editor = QComboBox(parent)
        editor.setAutoFillBackground(True)

        for item in self.items:
            editor.addItem(item)

        return editor

    def setEditorData(self, editor, index):
        current_index = editor.findText(index.model().data(index), Qt.MatchExactly)
        editor.setCurrentIndex(current_index)

    def setModelData(self, editor, model, index):
        item_index = model.mapToSource(index)
        item = model.sourceModel().item(item_index.row(), 0)

        if index.parent().row() == -1 and item.hasChildren():
            for row in range(item.rowCount()): …
Run Code Online (Sandbox Code Playgroud)

python pyqt qtreeview qstyleditemdelegate pyqt5

4
推荐指数
1
解决办法
448
查看次数