python - 在 Django 中停止正在运行的函数
问题描述
我正在上传一个 CSV 文件,然后在数据库中添加行,我希望能够暂停、恢复或终止处理上传的函数,以便用户可以在文件仍在将文件上传到服务器或何时暂停或终止服务器正在将 CSV 文件的内容添加到数据库中我尝试使用线程但我不能那样做然后我尝试time.sleep()
但它只是运行并且它不会暂停显示功能以及当我尝试停止时暂停功能它不会停止
视图.py
is_paused = False
def show(request):
content = {}
if not is_paused:
if request.method =='POST':
uploaded_file = request.FILES['file']
print(uploaded_file.name)
print(uploaded_file.size)
fs = FileSystemStorage()
fs.save(uploaded_file.name,uploaded_file)
upload = Upload()
upload.title = uploaded_file.name
upload.file = uploaded_file
upload.save()
filecontent = file_content()
path = '/home/ahmed/Desktop/atlan/atlan/media/'+uploaded_file.name
with open(path) as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
next(csv_reader)
for row in csv_reader:
filecontent.seq = row[0]
filecontent.First_name =row[1]
filecontent.Last_name = row[2]
filecontent.age = row[3]
filecontent.street = row[4]
filecontent.city = row[5]
filecontent.state = row[6]
filecontent.zipcode = row[7]
filecontent.dollar = row[8]
filecontent.color = row[9]
filecontent.date = row[10]
file_content.CSV_ID = upload.ID
filecontent.save()
else:
time.sleep(2)
return render(request,'upload/upload.html', content)
def pause_upload(request):
global is_paused
if is_paused == True:
is_paused = False
else:
is_paused = True
return HttpResponse("PAUSED")
def resume(request):
stop_threads = 0
t1 = Thread(target = pause_upload, args =(lambda : stop_threads, ))
t1.start()
time.sleep(1)
stop_threads = 1
t1.join()
print('thread continued')
return render(request,'upload/upload.html')
def stop(request):
pause_upload(request,stop=True)
sys.exit()
return HttpResponse(request,'stopped')
上传.html
<body>
<div class="container">
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
<div class="custom-file">
<label class="text" for="title">title</label>
<input type="text" class="text" name="title">
</div>
<div class="custom-file">
<label class="file-label" for="file">Browse</label>
<input type="file" class="file-input" name="file">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
<div class="container">
<a href="{% url 'pause_upload' %}" class="btn btn-danger">Pause</a>
<a href="{% url 'stop' %}" class="btn btn-danger pull-right">Stop</a>
<a href="{% url 'resume' %}" class="btn btn-success pull-right">Resume</a>
</div>
</div>
</body>
解决方案
推荐阅读
- amazon-web-services - 具有符合 CNAME 的虚拟名称的 AWS S3 url
- bash - 引号内的 bash 字符串格式
- node.js - Discord 音乐机器人 - 跳过歌曲的问题
- python - 滚动条不移动但内容不移动
- autohotkey - 为什么 Shift + Numlock 不起作用,即使有 +NumLock::NumLock?
- java - Jpa + Spring Boot 实体过滤器
- python - 是否可以在 excel 中编辑 Y 轴值?
- javascript - 使用 JQuery 动态重复和删除表单元素
- javascript - 使用编码语言的 RDP 连接
- c# - 调用 C# 类在脚本任务(SSIS)中运行