Python-关于并发使用 `multiprocess`的问题

标签 python multithreading multiprocessing gil

我想使用 Python 的多处理在不使用锁的情况下进行并发处理(锁对我来说是多处理的对立面),因为我想在网络请求期间同时从不同的资源构建多个报告(通常需要大约3 秒,但通过多处理,我可以在 0.5 秒内完成)。

我的问题是,如果我在网络上公开这样的功能并让 10 个用户同时提取同一份报告,我突然同时打开了 60 个解释器(这会使系统崩溃)。这只是使用多处理的常识性结果,还是有解决这个潜在噩梦的技巧?

谢谢

最佳答案

如果您真的担心有太多实例,您可以考虑使用信号量对象来保护调用。如果我明白你在做什么,那么你可以使用线程信号量对象:

from threading import Semaphore
sem = Semaphore(10)
with sem:
    make_multiprocessing_call()

我假设 make_multiprocessing_call() 会自行清理。

这样只会打开 10 个“额外”的 python 实例,如果出现另一个请求,它只需等到前一个完成即可。不幸的是,这不会按“队列”顺序......或任何特别的顺序。

希望对你有帮助

关于Python-关于并发使用 `multiprocess`的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2738959/

相关文章:

MySQL Replication : SQL Thread, 有哪些权限?

c - OpenMP、多线程或多处理 (C)?

python - 根据列值突出显示数据框中的行?

python - python中如何获取项目根目录下子文件夹的路径?

python - 无法关闭Python应用程序

python多处理从多处理队列访问数据不读取所有数据

Python:在多个进程上分配视频帧

python - 使用 App Engine Python 接收非 ascii 电子邮件会导致奇怪的字符编码

java - JProfiler 分析新线程

c# - ASP.NET MVC 中的异步方法