我在一个Django项目中尝试使用芹菜进度来创建进度条。你知道吗
但当我试图利用进步_recorder.set\u进度以下函数中的方法(使用芹菜工人):
def increase_task_progress():
global progress_recorder_current, progress_recorder_total, progress_recorder
progress_recorder_current += 1
progress_recorder.set_progress(progress_recorder_current, progress_recorder_total) <<<
它给出了以下例外:
Traceback (most recent call last):
File "/usr/lib/python3.7/threading.py", line 917, in _bootstrap_inner
self.run()
File "/usr/lib/python3.7/threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "/projects/report/excel.py", line 193, in generate_data_sheets
increase_task_progress()
File "/projects/report/excel.py", line 199, in increase_task_progress
progress_recorder.set_progress(progress_recorder_current, progress_recorder_total)
File "/projects/report/my_venv/lib/python3.7/site-packages/celery_progress/backend.py", line 38, in set_progress
'percent': percent,
File "/projects/report/my_venv/lib/python3.7/site-packages/celery/app/task.py", line 930, in update_state
self.backend.store_result(task_id, meta, state, **kwargs)
File "/projects/report/my_venv/lib/python3.7/site-packages/celery/backends/base.py", line 342, in store_result
request=request, **kwargs)
File "/projects/report/my_venv/lib/python3.7/site-packages/celery/backends/base.py", line 714, in _store_result
self.set(self.get_key_for_task(task_id), self.encode(meta))
File "/projects/report/my_venv/lib/python3.7/site-packages/celery/backends/base.py", line 590, in get_key_for_task
self.task_keyprefix, key_t(task_id), key_t(key),
TypeError: sequence item 1: expected a bytes-like object, NoneType found
这些是我的代码,直到到达increase_task_progress
函数。你知道吗
视图.py
from django.http import HttpResponse
from . import tasts
def myView(request):
report_id = request.POST.get('report_id', 0)
result = tasks.generate_report.delay(report_id)
response = HttpResponse(content=task.task_id)
return response
任务.py
from . import excel
from celery import shared_task
@shared_task(bind=True)
def generate_report(self, report_id):
task = excel.generate_xls_report(
report_id=report_id
task_obj=self
)
return task
excel.py文件
from celery_progress.backend import ProgressRecorder
from xlsxwriter.workbook import Workbook
from . import database
import threading, io
workbook = None
progress_recorder = None
progress_recorder_current = 0
progress_recorder_total = 4
def generate_xls_report(report_id, task_obj):
global progress_recorder, workbook
progress_recorder = ProgressRecorder(task=task_obj)
output = io.BytesIO()
workbook = Workbook(output, {'constant_memory': True})
db_conn = database.get_db_conn()
thread_product = threading.Thread(target=generate_data_sheets, args=("product", db_conn))
thread_product.start()
thread_sales = threading.Thread(target=generate_data_sheets, args=("sales", db_conn))
thread_sales.start()
thread_product.join()
thread_sales.join()
db_conn.close()
workbook.close()
output.seek(0)
print("Program finished!")
return workbook
def generate_data_sheets(table_name, db_conn):
#Generate the excel data sheet code HERE...
increase_task_progress()
print("Table {} done".format(table_name))
def increase_task_progress():
global progress_recorder_current, progress_recorder_total, progress_recorder
progress_recorder_current += 1
progress_recorder.set_progress(progress_recorder_current, progress_recorder_total)
拜托,我的代码怎么了?你知道吗
谢谢
我通过创建一个名为“ReportGenerator”的类并使用螺纹。锁紧()用于python。你知道吗
请参见下面的代码:
相关问题 更多 >
编程相关推荐