问题标签 [python-multiprocessing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 使用多处理时 Django 1.7 和 Python 3.4 中的 AppRegistryNotReady
在 Django 视图中,我生成了一个线程(threading.Thread 类),该线程又创建了一个由 5 个工作人员组成的多处理池。是的,我知道使用像 Celery 这样的任务队列通常是公认的做事方式,但在这种情况下,我们需要线程/多处理。
线程和每个多进程工作人员都访问数据库中的项目。但是,在 Thread 或 Worker 中对 Django 模型进行任何调用都会导致“django.core.exceptions.AppRegistryNotReady:尚未加载模型”异常。
这是完整的堆栈跟踪:
奇怪的是,我在堆栈跟踪中没有看到我的代码的任何部分。
我已经尝试在 Thread init 中执行 django.setup() ,并且在工人开始的方法开始时,仍然没有成功。
在我的模型中,我从未尝试从数据库中读取任何内容,例如对用户模型执行外键的常见问题。
编辑:
我可以通过将 django.setup 放在 Simulation 类下而不是将其放在 init 方法中,从而使数据库查询在 Thread 中工作。但是我仍然对工人中的查询有疑问。
编辑2:
如果我修改 Python 的 queue.Queue 文件并将 django.setup() 调用放在 get 函数中,一切都会很好。但是,这不是一个有效的解决方案。有任何想法吗?
编辑3:
如果我在 PyCharm 中运行测试,那么与这个问题相关的测试就可以工作。在 PyCharm 之外的普通命令行中运行测试(或从服务器 [django 测试服务器或 CherryPy] 运行视图服务器)会导致上述错误。
如果有帮助,这里是 GitHub 上的 views.py 的链接。
供将来参考(在我们修复错误之后),您可以在提交 b4bbbcf7 上看到奇怪的行为(上面链接)。
python - Python 进程池未创建预期的进程数
我正在尝试使用 python 的 pool 模块编写一个简单的程序。这是我的代码:
当我运行这个程序时,我期望看到 4 个不同的进程 id 被打印出来,每个创建的子进程一个。我选择的块大小为 1,因此列表中的每个项目都进入一个单独的进程。
但是,正在打印的进程 ID 是相同的。我得到以下输出:
我是不是在这里搞错了。请任何人都可以对此有所了解。提前致谢。
python - Python:如何并行运行两个函数
这是我的程序的结构:
我怎样才能做到这一点?
python - 使用多处理用Python读取多个文件有意义吗?
我打算使用多处理来读取一组具有 Python 多处理功能的小文件。然而,这在某种意义上对我来说很尴尬,因为如果磁盘是旋转的,那么瓶颈就是旋转时间,即使我使用多个进程,总读取时间应该与单进程读取相似。我错了吗 ?你有什么意见?
另外,您是否认为使用多处理可能会导致文件的交织读取,因此这些文件的内容会以某种方式倾斜?
python - 记录器不适用于 python 多处理
我正在使用 python 多处理编写一个测试程序。我正在使用记录器来记录所取得的进展。但是记录器似乎不起作用。它不会从子进程中记录或打印。无法弄清楚出了什么问题。用普通的打印语句替换记录器也无济于事。下面是我的代码:
我得到的输出如下:
它没有记录“'****Inside f..******'”(来自函数f)请任何人帮助我弄清楚我做错了什么。使用多处理进行日志记录似乎是一个难题:(我使用的是 Python 2.6.6。操作系统是 windows-32bit/64 位。
python - python多处理。长时间执行后,池卡住了
我正在开发一个分析大文件的工具。为了更快地做到这一点,我在它上面引入了多处理,一切似乎都工作正常。为了做到这一点,我正在使用 multiprocessing.pool 创建 N 个线程,它们处理我之前创建的不同工作块。
如您所见,这是标准池执行,没有特殊用途。
最近,当我运行大量数据时,我发现了一个问题。16 个线程的标准执行大约需要 2 个小时,但我有一个特殊情况,需要大约 8 个小时,因为它的文件数量和大小都非常大。
问题是最近我发现当我执行这个案例时,执行运行良好,直到完成,除了一个被卡住的孩子之外,大多数孩子都能正常完成
由于这个孩子没有完成父母不会醒来并且执行停止。
这种情况仅在输入文件非常大时才会发生,所以我想知道是否存在任何可能导致此问题的默认超时。
我正在使用 python 2.7 多处理 0.70a1
我的机器是centos 7(32核,64GB RAM)
在此先感谢您的帮助
霍尔迪
python - 使用 Python 的 Pool map 方法时无法返回自定义对象
我正在尝试使用多处理在 python 中编写一个简单的测试程序。我正在使用 Pool.map() 。对它,我传递了应该由子进程调用的方法。它可以正常工作,并且当返回类型是 python 内置类型(例如字符串、日期时间等)时,我得到了预期的结果。但是,当我使用自定义类作为返回类型时,我的进程就会挂起。不确定我是否做对了,任何建议将不胜感激。这是我的代码如下:
我正在使用 Python 2.6.6。操作系统是 windows-32 位/64 位。
python-multiprocessing - Python multiprocessing.pool 顺序运行进程
我对 python 尤其是“多处理”模块很陌生。但是,我设法编写了一个非常简单的脚本来在 24 个 CPU 上运行多个进程(比如 100 个)。但是,我注意到该过程不是按顺序运行,而是随机运行。有没有办法让进程按顺序运行。这是我的代码:
运行 python 代码后,我执行 'ps -ef | grep 我的名字'。而不是得到:
我正进入(状态:
知道为什么命令不按顺序运行吗?
python - 如何在多处理中编排流程?
我正在编写一个程序来multiprocessing.Queue
并行处理多个进程。我越深入到编排部分,我理解的就越少。
我想要实现的是启动几个流程并确保所有流程都已完成,然后再继续进行。这听起来像是一份工作.join()
。
我最终测试了以下演示脚本(在 Linux 上运行):
我期望该功能启动 3 次,立即打印“hello”消息,然后休眠。一旦他们都完成睡眠,最后的消息(“结束”)就会被打印出来。
我实际得到的是:
运行脚本时,它会在第三个“hello”和第二个“joining”之间等待。
我应该如何设计多处理代码,以便实现预期的编排,如上所述?
python - Python multi processing start the script over again?
I am using multi processing
in Python. The following is the demo of my code:
In function main
:
And in function proc1
and proc2
:
So what I expect to see as output is:
Main program starts here.
Proc1 starts from here.
Proc2 starts from here.
However, what I got is:
Main program starts here.
Main program starts here.
Main program starts here.
It seems that both the proc1
and proc2
start the main
rather than the procs.
May I know what is wrong with my code?
Many thanks.