Docker中的Python- RuntimeError:无法启动新线程

zbdgwd5y  于 2023-11-15  发布在  Python
关注(0)|答案(3)|浏览(472)

我自己无法调试一个错误。我在Fedora release 35(Thirty Five)上的docker镜像中运行python 3.8.12,无法从python生成线程。boto3传输需要并行运行,它使用concurrent.features来实现。
复制我的问题而没有任何依赖关系的最简单的例子是(从python文档复制)

import concurrent.futures
import urllib.request

URLS = ['http://www.foxnews.com/',
        'http://www.cnn.com/',
        'http://europe.wsj.com/',
        'http://www.bbc.co.uk/',
        'http://some-made-up-domain.com/']

def load_url(url, timeout):
    with urllib.request.urlopen(url, timeout=timeout) as conn:
        return conn.read()

with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
    future_to_url = {executor.submit(load_url, url, 60): url for url in URLS}
    for future in concurrent.futures.as_completed(future_to_url):
        url = future_to_url[future]
        try:
            data = future.result()
        except Exception as exc:
            pass

字符串
遗憾的是,这些行的输出是

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "<stdin>", line 2, in <dictcomp>
  File "/usr/lib64/python3.8/concurrent/futures/thread.py", line 188, in submit
    self._adjust_thread_count()
  File "/usr/lib64/python3.8/concurrent/futures/thread.py", line 213, in _adjust_thread_count
    t.start()
  File "/usr/lib64/python3.8/threading.py", line 852, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread


这就是我所有的。有地方我应该看看吗?我已经检查了ulimit,上面写着unlimited。我有点绝望,在哪里寻找或改变什么来调试这个问题。

h6my8fg2

h6my8fg21#

这个问题的解决方案是将Docker从版本18.06.1-ce升级到20.10.7。
为什么
这是因为Docker 20.10.9的默认seccomp配置文件没有调整以支持Ubuntu 21.10和Fedora 35中采用的glibc 2.34的clone()syscall Package 器。
来源:ubuntu:21.10 and fedora:35 do not work on the latest Docker (20.10.9)

zaq34kh6

zaq34kh62#

我在docker安装Flask的时候遇到了这个问题,进度条导致了这个问题,所以我用pip install Flask --progress-bar off解决了

3ks5zfa0

3ks5zfa03#

我在Ubuntu 18上使用Docker version 19.03.12部署FastAPI服务器容器时,收到以下错误:

File "/usr/local/lib/python3.10/threading.py", line 935, in start
    _start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread

字符串
我的环境:

  • Docker镜像:python:3.9-slim
  • Python依赖项:uvicorn==0.24.0.post1gunicorn==21.2.0httpx==0.25.1

正如@Yuri Pozniak在接受的回答中提到的那样,降级到Debian靶心是有效的。
我刚刚将Docker镜像从python:3.9-slim更改为python:3.9-slim-bullseye,一切都开始正常工作。
此外,我还必须在Dockerfile中禁用pip进度条:

  • RUN pip config --user set global.progress_bar off

相关问题