Jsem schopen ladit jednu chybu sám. Jsem běží python 3.8.12 uvnitř docker image na Fedora release 35 (Třicet Pět) a nejsem schopen se třou vlákna z pythonu. Je to nutné pro boto3
přenos probíhat paralelně a používá concurrent.features
, aby tak učinily.
Nejjednodušší příklad, který kopíruje můj problém bez jakékoli závislosti je (zkopírováno z python docs)
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
bohužel výstup z těchto řádků je
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
To je vše, co mám. Je tam místo, kde bych měl hledat? Už jsem se dívala ulimit
který říká, unlimited
. Jsem tak trochu ze zoufalství, kam se podívat nebo co změnit ladění tohoto problému.