问题标签 [multiprocess]

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.

0 投票
1 回答
1334 浏览

python - 鼻子多进程问题

我在进行鼻子测试时遇到问题。当我从 Eclipse 运行我的套件时,使用Eclipse 首选项中Run As>Python unit-test的测试运行程序设置为Nose test runner和参数,我得到了一个很好的、有序的运行,其中 4 个新的 python 进程启动,我得到了我的 19 个测试的结果(一个类源自2 个测试生成器方法,第一个分派 6 个测试,第二个分派 13 个)在几分钟内(每个测试都进行一系列 REST 调用,然后进行一些验证)。但是,当我从命令行运行相同的文件时--verbosity=2 --processes=2 --process-timeout=300PyDev>PyUnitobjectnosetests --processes=2 --verbosity=2 --process-timeout=300 testfile.py,它产生了 100 个新的 Python 进程,这些进程似乎是按组组织的,其中一个进程的内存使用量略高于 6k,而其他进程的内存使用量为 50-500k。这些进程无限期地产生,并且测试永远不会完成,直到我开始手动终止这些进程。如果我在没有多处理的情况下从命令行运行测试,它们也可以很好地完成。

Eclipse 是否对测试过程进行了一些额外的控制?我是否可能在 Eclipse 和命令行中运行不同版本的鼻子(即使我在站点包中只看到 1 个鼻子安装)?

0 投票
1 回答
161 浏览

python - Process 和 Pool 类是否共享相同的工人?

我有一个 python 脚本正在执行一些 map reduce-ish ETL。我不是代码的发起者,而是致力于分析/诊断其运行时以进行一些改进。

在包中,它使用了一个“进程”:

从我们的 CDN 中提取新文件的永久 FTP 循环,不能包含 FTP 代码,但不应该与问题相关

在后面的代码中,我们创建了一个Pool运行一些异步函数的 worker 实例:

同样,其中的基础代码应该与我认为不包括代码的问题无关。

我的问题是,在 Python 中,一旦我创建了工人Pool,那里的工人会与Process?

换句话说,如果我首先创建 1 个带有进程执行某事的工作人员,然后在执行时创建具有池类的工作人员,当循环返回并尝试运行向该过程注册的函数时,它会使用先前创建的工作人员吗?

或者,相反,它是否通过允许每个类实例仅引用它产生的工人(Process重用其先前创建的一个工人,并Pool继续使用其指定的工人与Process使用产生的工人Pool)。

0 投票
1 回答
241 浏览

c - 多进程信号处理程序中的奇怪结果

我有这个由 9 个进程组成的多进程程序。一个是产生 3 个信号生成过程和 4 个信号处理过程的主要过程。一是监控过程。现在我使用了两个信号 SIGUSR1 和 SIGUSR2。每个处理程序都可以处理 SIGUSR1 或 SIGUSR2。每当收到信号时,它们会将共享内存中信号 SIGUSR1 和 SIGUSR2 的计数增加 1。监控进程也接收到信号,因为信号被发送到进程组。它可以处理这两个信号并将其本地信号计数增加 1。每当达到 10 时,它就会打印出共享内存中 SIGUSR1 和 SIGUSR2 的计数值。

我在主程序中有这个选项,它可以运行 30 秒并终止程序,在这种情况下我执行 sleep(30) 然后终止程序。在第二种情况下,它会在一个 while 循环中忙着等待,计算共享内存中 SIGUSR1 和 SIGUSR2 的总数。当它达到 100000 时,它终止程序。

这是我的两个版本的输出

对于100000秒版本

100000信号版本输出

对于 30 秒版本

初始化共享内存

为什么在第二种情况下结果如此滞后。我的意思是当监视器第一次打印输出时,处理线程记录的 SIGUSR1 和 SIGUSR2 的计数已经达到 93 和 222。信号也被发送到进程组。所以每个信号都由两个处理程序和一个监视器处理。在处理程序的情况下只有两个,因为在四个处理程序中,两个处理 SIGUSR1 并忽略另一个信号,反之亦然。

因此,当我执行 sleep(30) 并查看结果时,您可以看到问题所在。任何见解。我已经尝试调试了好几天,但还没有成功。

0 投票
1 回答
473 浏览

python - python多进程中的C静态变量

在这里,我有一个用 C++ 调用foo编写的函数,并通过使用用 C 编写的 python 包装器(wrapper.c)使其可从 python 调用(foo_wrapper)。

在 wrapper.c 中,我有一个静态全局变量“x”,由foo使用和更新。

现在,当我在一个进程中从 python调用foo时,一切正常。

但是,当我在 python 中使用进程模块时,即使 foo 是从主进程调用的,这个“x”值也不是应该的!调用过程是这样的:

我的问题是:当调用 fork() 时,即启动多个进程,python 如何处理父/子进程的堆栈或堆?我怎样才能使主进程(或父进程)的“x”值正确?

0 投票
2 回答
137 浏览

python - Python线程 - 编译时监听网络

在python(2.6.6)中,我可以让线程/进程在同时工作(编译)的同时检查网络(消息队列)的最佳方式是什么。如果我在消息队列中收到一条命令,我必须能够杀死并生成编译线程。

0 投票
1 回答
1184 浏览

python - Django 多处理异常

在使用 ./manage.py shell 来练习一些代码时,我遇到了一些我不理解的东西。

我从来没有机会p.start()在这个过程中做一个或设置任何其他变量。它似乎在实例化时执行。当我尝试使用我认为的代码时,我似乎根本没有产生多个进程,一切都保留在一个核心上。

我做错了什么或误解?我想manage.py processphoto在单独的进程中生成单独的命令以充分利用多核服务器。

0 投票
0 回答
1568 浏览

c - 跨子进程的 mmap 写同步

我有一个多进程和多线程的服务器。处理请求时的子进程会更新一些统计信息。此统计数据是由所有子进程更新的结构。这些子进程中的每一个都是多线程的。子进程的数量根据请求的数量是动态的(增加或减少)。

为了同步写入这个 stat 结构,我使用 mmap。这是地图的初始化方式。

同样在我操作统计信息的代码中,我使用锁在进程内的多个线程之间进行同步。

现在,我遇到的问题是,在重负载下,写入似乎不同步。统计信息未正确更新。在正常负载下,统计数据会正确递增。

根据我的理解,如果指定了 MAP_SHARED,则写入引用会更改底层对象,并且映射类型会在 fork() 中保留。我错过了什么?

0 投票
1 回答
3757 浏览

python - Python 使用 execv 重定向标准输入/标准输出

我正在使用 python 来os.fork进行子进程,并用于os.execv在子进程中执行另一个程序。如何在子程序中重定向 I/O。我试过这个但失败了。

虽然test.py是:

0 投票
1 回答
1036 浏览

python - 多线程 psycopg2 和 python 不返回结果

我有一个程序,其中父进程有一个数据库连接,每个子进程都有自己的数据库连接(在构造函数中创建),使用 python 2.6 和 psycopg2。

每 5 秒,父进程查询数据库以获取有关子进程的进度报告。每个子进程都在做 X 件事,并将其所在的步骤存储在数据库中。

我在下面放了代码的简化版本

在子进程内部,它调用以下内容:

数据库的外部查询 (psql) 表明查询在程序中运行时返回了正确的结果。但是,在程序中并非如此。如果我在 time.sleep 调用后更改程序以重新初始化数据库,它会给出正确的输出。为什么?

0 投票
4 回答
109488 浏览

c - 互斥锁线程

我是多线程/进程编程的新手。所以这是我需要澄清的。

处理 A 代码

sharedResource使用上面的伪代码,如果互斥锁没有解锁,进程B是否可以访问?

如何正确访问进程 B 中的 sharedResource?

是否有任何清晰的可视化图表来解释互斥锁、线程和进程之间的关系?