【问题标题】:How to run threads with django如何用django运行线程
【发布时间】:2023-02-16 15:03:48
【问题描述】:

如何使用 Django 运行线程如何在视图文件中发送数据

from django.shortcuts import render
from django.http.response import HttpResponse
from datetime import datetime

from .pnet import Worker1

global value
value = False

def home(request):
 
    global value

    if value == False:
        Worker1.start()
        print(a)

    value = True

    
    today = datetime.today()

  
    return render(request, "home.html")`

pnet.py

import threading


class Worker1(threading.Thread):

    def run(self):
        a = 10`

【问题讨论】:

    标签: python django


    【解决方案1】:

    在您的代码中,看起来您正在使用 home 视图中的 start() 方法启动 Worker1 线程。但是,不清楚您要通过运行此线程来实现什么。

    假设你想在一个单独的线程中执行一些后台任务并在不等待任务完成的情况下将响应返回给用户,你可以使用 Django 对异步视图的支持。以下是如何修改代码以实现此目的的示例:

    from django.shortcuts import render
    from django.http.response import HttpResponse
    from datetime import datetime
    
    from .pnet import Worker1
    
    async def background_task():
        # Do some long-running task
        await asyncio.sleep(10)
        return 'Task completed'
    
    async def home(request):
        # Start the background task in a new thread
        task = asyncio.create_task(background_task())
    
        # Render the response to the user immediately
        return render(request, "home.html")
    
    class MyThread(threading.Thread):
        def run(self):
            result = asyncio.run(background_task())
            # Do something with the result, such as saving it to a database
    

    在这里,background_task 函数是一个异步函数,它执行一些长时间运行的任务(在本例中,只是休眠 10 秒)并返回结果。您可以修改此函数以执行您需要执行的任何任务。

    home 视图是一个异步视图,它使用asyncio.create_task 在新线程中启动background_task。然后它会立即将响应返回给用户,而无需等待任务完成。

    如果您需要对任务的结果做一些事情,例如将其保存到数据库中,您可以创建一个新线程并在该线程中运行任务,如MyThread 类所示。

    请注意,这只是一个示例,您需要修改代码以适合您的特定用例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多