我有一个Python进程,使用多处理模块生成其他5个Python进程.让我们调用父进程P0和其他P1-P5.要求是,如果我们将SIGTERM发送到P0,它应该首先关闭P1到P5然后退出自己.
问题是P1和P5正在等待信号量.因此,当我将SIGTERM发送到这些进程时,它们会调用信号处理程序并退出.但由于他们正在等待信号量,他们会抛出异常.有没有办法在退出之前捕获该异常,以便P0到P5可以正常退出?
追溯:
Traceback (most recent call last):
File "/usr/lib64/python2.7/multiprocessing/process.py", line 258, in _bootstrap
Traceback (most recent call last):
Process Process-2:
File "/usr/lib64/python2.7/multiprocessing/process.py", line 258, in _bootstrap
Traceback (most recent call last):
self.run()
File "/usr/lib64/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
Process Process-5:
Traceback (most recent call last):
File "/usr/lib64/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib64/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "/opt/fireeye/scripts/mip/StaticAnalysisRunner.py", line 45, in run
qsem.acquire()
Run Code Online (Sandbox Code Playgroud) 给定一个字符串形式的表达式,求解x.表达式中x的最高幂将等于1.允许的运算符为+,*和 - .这些都是二元运算符.因此,2x将被写为2*x.每个操作员后面都会跟一个单词或一个常数.
例如,请考虑以下等式:
2*X + 5-(4*X-7 +(4-2))= 10*X-9
这是一个完全有效的方程式.形式1*2*3的表达式无效,但1*(2*3)有效.
给定这样的等式,我们需要找到x的解决方案.如果等式无效,程序应显示错误消息.
有人可以解释如何解决这个问题吗?我现在唯一想到的就是使用Context Free Grammars进行词法分析和解析.但我觉得有一个比这更简单的解决方案.有人可以对它有所启发吗?
我知道Python 2.7不允许在不同的内核上运行多个线程,并且您需要使用该multiprocessing模块才能实现某种程度的并发性。我正在查看concurrent.futuresPython 3.4 中的模块。使用 a 是否ThreadPoolExecutor允许您在不同的进程上运行不同的线程,或者它仍然受到 GIL 约束?如果没有,是否有办法使用 Python 3.4 在不同处理器上运行线程?
对于我的用例来说,使用多个进程是绝对不可行的。
我有一个作为守护进程运行的Python脚本.在启动时,它会生成5个进程,每个进程都连接到Postgres数据库.现在,为了减少数据库连接的数量(最终会变得非常大),我试图找到一种跨多个进程共享单个连接的方法.为此我正在寻找multiprocessing.sharedctypes.ValueAPI.但是,我不确定如何psycopg2.connection跨进程使用此API 传递对象.谁能告诉我怎么做?
我也愿意接受其他想法以解决这个问题.
我没有考虑将连接作为构造函数的一部分传递给5个进程的原因是互斥处理.如果我遵循这种方法,我不确定如何防止多个进程访问连接.谁能告诉我这是否是正确的做法?