ThreadPool: ошибка: не может начать новую тему - PullRequest
0 голосов
/ 17 октября 2018

У меня есть дерево с числом узлов (около 20-25).Я использую ThreadPool для выполнения метода запуска всех узлов в режиме BFS, то есть не все узлы, вызываемые одновременно, только узлы на этом уровне глубины в дереве.

У меня есть не более 10 таких деревьев, которые всеЗапустите одновременно, чтобы выполнить метод запуска ниже, используя потоки.Я использую ThreadPool с 4 потоками.Это означает, что в каждой точке мой процесс имеет около 10 * 4 + 20 (другие потоки, которые я мог бы запустить), которые выполняются, грубо говоря.В любом случае, не близко к тысячам.

Но я все еще время от времени получаю:

pool = ThreadPool(self.number_of_threads) 
File "/usr/lib64/python2.7/multiprocessing/pool.py", line 732, in __init__ 
Pool.__init__(self, processes, initializer, initargs) 
File "/usr/lib64/python2.7/multiprocessing/pool.py", line 161, in __init__ 
self._repopulate_pool() 
File "/usr/lib64/python2.7/multiprocessing/pool.py", line 225, in _repopulate_pool 
w.start() 
File "/usr/lib64/python2.7/multiprocessing/dummy/__init__.py", line 75, in start 
threading.Thread.start(self) 
File "/usr/lib64/python2.7/threading.py", line 739, in start 
_start_new_thread(self.__bootstrap, ()) 
error: can't start new thread

И это мой метод запуска:

def run(self):
    """
    Run all TreeNode's of the this ThreadedTree using ThreadPool.
    Iterate over all TreeNode's of this ThreadedTree level by level and invoke the run method.
    :return: None.
    """
    nodes = self.roots
    while nodes:
        pool = ThreadPool(4)
        rc = sum(pool.map(self.__run_node, [node.name for node in nodes]))
        _nodes = []
        for node in nodes:
            _nodes.extend(node.get_children())
        nodes = _nodes

Из исследования этогоЯ понимаю, что я могу столкнуться с каким-то лимитом процесса на Python, сколько потоков я могу открыть.Но если он не отличается от предела ОС (в моем случае я работаю на Fedora27, и у меня 95648), тогда я не понимаю, как я могу достичь этого предела.

...