python - Python多处理池线程安全吗?

标签 python django

我有 Django 项目。如果我创建包含 Pool() 对象的包变量,并尝试从 Django View (以并行方式运行)中使用该 Pool,这种方式线程安全吗?还有其他方法吗?

from multiprocessing import Pool
general_executor_pool = Pool()

最佳答案

我在问同样的问题时通过 Google 发现了这个问题。有趣的是,我可以说不,它不是,因为我最近调试了一个存在竞争条件的软件。事情是这样的:

  1. 一个主进程循环运行,每 3 分钟在一个新线程中生成一个多处理池,其中包含约 1000 个要处理的帐户列表
  2. 线程调用了 multiprocessing.Pool(max_processes=32), pool.map(func, accounts)。这将打开 32 个流程,并将每个帐户一个接一个地应用到一个可用流程。
  3. 原作者不知道,这个过程用了 3 分钟多的时间才完成。那么下次生成线程以创建多处理池时会发生什么?它是否产生了 32 个新进程,总共 64 个?不,实际上没有。相反,我的结果被打乱了,并显示多个线程以不确定的方式对我的数据进行操作。

我很乐意跟踪多处理模块,看看它是否在设计上是非线程安全的,或者从知情人士那里得到答案。有趣的是,至少我亲眼目睹了事实并非如此。

关于python - Python多处理池线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40351628/

相关文章:

python - 如何在 Django 中查看用户的 DetailView?

python - 使用 Django 上传、处理和下载

python - 在 Pytest 中,根级别的 conftest.py 是否会被树中更深处的 conftest 覆盖?

python - 从Django的数据库中添加一天的时间

python - Django:生成 CSV 文件并将其存储到 FileField

django - 如何在不删除记录的情况下更改用户组

python - Django REST Framework 不以 PUT 形式显示值

python - 是否可以在脚本中设置 python -O(优化)标志?

python - 如何使用 chainer 在 google colab 上从 CPU 切换到 GPU?

python - unsigned char* 图像到 Python