小编Eri*_*a L的帖子

检测concurrent.futures中的失败任务

我一直在使用concurrent.futures,因为它有一个简单的界面,让用户可以轻松控制线程/进程的最大数量.但是,似乎concurrent.futures隐藏了失败的任务,并在所有任务完成/失败后继续主线程.

import concurrent.futures

def f(i):
    return (i + 's')

with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
    fs = [executor.submit(f, i ) for i in range(10)]
    concurrent.futures.wait(fs)
Run Code Online (Sandbox Code Playgroud)

在任何整数上调用f都会导致TypeError.但是,整个脚本运行得很好,并以代码0退出.有没有办法让它在任何线程失败时抛出异常/错误?

或者,有没有更好的方法来限制线程/进程数量而不使用concurrent.futures?

python multithreading multiprocessing python-multithreading concurrent.futures

6
推荐指数
1
解决办法
2849
查看次数

python subprocess.call 不能正确处理信号

(我使用的是 Python 3.4.2)我有一个脚本 test.py,它处理 SIGTERM 等。但是,当它被其他脚本调用时,信号处理不正确。

这是 test.py:

#! /path/to/python3
import time
import signal
import sys

def handleSIG(signal, frame):
    for i in range(10):
        print(i)
    sys.exit()

for sig in [signal.SIGTERM, signal.SIGINT, signal.SIGQUIT, signal.SIGHUP]:
    signal.signal(sig, handleSIG)

time.sleep(30)
Run Code Online (Sandbox Code Playgroud)

如果我只是调用“test.py”并执行“Ctrl+C”,那么它会在控制台上打印 0,1,...,9。但是,如果我使用 subprocess.call 在另一个脚本中调用 test.py,则只会打印 0。例如,这是另一个调用 test.py 的脚本:

import subprocess

cmd = '/path/to/test.py'
subprocess.call(cmd)
Run Code Online (Sandbox Code Playgroud)

奇怪的是,使用 subproces.Popen() 会使这个错误消失。

python subprocess signals python-3.x

3
推荐指数
1
解决办法
3429
查看次数