我一直在使用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
(我使用的是 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() 会使这个错误消失。