gpt4 book ai didi

python - 如何在 python 中创建线程安全的单例

转载 作者:太空狗 更新时间:2023-10-29 17:50:41 24 4
gpt4 key购买 nike

我想在我的 Django 应用程序中保留正在运行的线程。由于我不能在模型或 session 中这样做,我想将它们放在一个单例中。我已经检查了一段时间,但还没有真正找到好的方法。

有谁知道如何在 python 中创建线程安全的单例?

编辑:

更具体地说,我想做的是实现某种“随时算法”,即当用户按下按钮时,返回响应并开始新的计算(新线程)。我希望此线程一直运行,直到用户再次按下按钮,然后我的应用程序将返回它设法找到的最佳解决方案。为此,我需要将线程对象保存在某处 - 我想将它们存储在 session 中,但显然我做不到。

底线是 - 我有一个 FAT 计算,我想在服务器端,在不同的线程中,同时用户正在使用我的网站。

最佳答案

除非你有很好的理由 - 你应该在不同的进程中执行长时间运行的线程,并使用 Celery执行它们:

Celery is an open source asynchronous task queue/job queue based on distributed message passing. It is focused on real-time operation, but supports scheduling as well.

The execution units, called tasks, are executed concurrently on one or more worker nodes using multiprocessing, Eventlet or gevent. Tasks can execute asynchronously (in the background) or synchronously (wait until ready).

djangonauts 的 celery 指南:http://django-celery.readthedocs.org/en/latest/getting-started/first-steps-with-django.html

对于单例和在任务/线程之间共享数据,同样,除非你有充分的理由,否则你应该谨慎使用db层(又名模型)关于数据库锁和刷新陈旧数据。

更新:关于您的用例,定义一个Computation 模型,带有一个status 字段。当用户开始计算时,将创建一个实例,并且任务将开始运行。该任务将监视 status 字段(偶尔检查数据库)。当用户再次单击按钮时, View 会将状态更改为 user requested to stop,从而导致任务终止。

关于python - 如何在 python 中创建线程安全的单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6368302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com